diff --git a/Makefile b/Makefile index f058eca1022eca063a7e3aab8deb7d66389b388a..f49fd50f55afc2f566c9a8dcc95203f43e58bfdd 100644 --- a/Makefile +++ b/Makefile @@ -266,7 +266,7 @@ define dump_hex_cache_to_erl_term Key =:= write_concurrency orelse Key =:= compressed], Entries = ets:tab2list(Tab), - ok = file:write_file(Out, io_lib:format("~p.~n~p.~n", [Props, Entries])), + ok = file:write_file(Out, io_lib:format("~w.~n~w.~n", [Props, Entries])), ok = file:delete(In), init:stop(). endef @@ -276,12 +276,15 @@ $(SOURCE_DIST).manifest: $(SOURCE_DIST) find $(notdir $(SOURCE_DIST)) | LC_COLLATE=C sort > $@ ifeq ($(shell tar --version | grep -c "GNU tar"),0) +# Skip all flags if this is Darwin (a.k.a. macOS, a.k.a. OS X) +ifeq ($(shell uname | grep -c "Darwin"),0) TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --uid 0 \ --gid 0 \ --numeric-owner \ --no-acls \ --no-fflags \ --no-xattrs +endif else TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --owner 0 \ --group 0 \ @@ -332,9 +335,7 @@ clean-unpacked-source-dist: .PHONY: packages package-deb \ package-rpm package-rpm-fedora package-rpm-suse \ - package-windows package-standalone-macosx \ - package-standalone-linux-x86_64 \ - package-standalone-freebsd-x86_64 \ + package-windows \ package-generic-unix # This variable is exported so sub-make instances know where to find the @@ -344,9 +345,7 @@ PACKAGES_SOURCE_DIST_FILE ?= $(firstword $(SOURCE_DIST_FILES)) packages package-deb package-rpm \ package-rpm-redhat package-rpm-fedora package-rpm-rhel6 package-rpm-rhel7 \ package-rpm-rhel8 package-rpm-suse package-rpm-opensuse package-rpm-sles11 \ -package-windows package-standalone-macosx \ -package-standalone-linux-x86_64 \ -package-standalone-freebsd-x86_64 \ +package-windows \ package-generic-unix: $(PACKAGES_SOURCE_DIST_FILE) $(verbose) $(MAKE) -C packaging $@ \ SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) @@ -383,8 +382,7 @@ SCRIPTS = rabbitmq-defaults \ rabbitmq-plugins \ rabbitmq-diagnostics \ rabbitmq-queues \ - rabbitmq-upgrade \ - cuttlefish + rabbitmq-upgrade AUTOCOMPLETE_SCRIPTS = bash_autocomplete.sh zsh_autocomplete.sh @@ -397,8 +395,7 @@ WINDOWS_SCRIPTS = rabbitmq-defaults.bat \ rabbitmq-server.bat \ rabbitmq-service.bat \ rabbitmq-upgrade.bat \ - rabbitmqctl.bat \ - cuttlefish + rabbitmqctl.bat UNIX_TO_DOS ?= todos @@ -411,24 +408,12 @@ install-erlapp: dist $(verbose) mkdir -p $(DESTDIR)$(RMQ_ERLAPP_DIR) $(inst_verbose) cp -r \ LICENSE* \ - $(DEPS_DIR)/rabbit/ebin \ - $(DEPS_DIR)/rabbit/priv \ $(DEPS_DIR)/rabbit/INSTALL \ $(DIST_DIR) \ $(DESTDIR)$(RMQ_ERLAPP_DIR) $(verbose) echo "Put your EZs here and use rabbitmq-plugins to enable them." \ > $(DESTDIR)$(RMQ_ERLAPP_DIR)/$(notdir $(DIST_DIR))/README - @# FIXME: Why do we copy headers? - $(verbose) cp -r \ - $(DEPS_DIR)/rabbit/include \ - $(DESTDIR)$(RMQ_ERLAPP_DIR) - @# rabbitmq-common provides headers too: copy them to - @# rabbitmq_server/include. - $(verbose) cp -r \ - $(DEPS_DIR)/rabbit_common/include \ - $(DESTDIR)$(RMQ_ERLAPP_DIR) - CLI_ESCRIPTS_DIR = escript install-escripts: diff --git a/debian/changelog b/debian/changelog index 8775a4851eca3477b096003ac47c6dd3455a67ee..1714b908b5eab6a745074ae41bfe2000744416cd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +rabbitmq-server (3.8.4-1) UNRELEASED; urgency=high + + * New upstream version: 3.8.4. closes: #964038 + * Updating standards version to 4.4.0. + * d/rules: remove some obsolete comments. + + -- Yury Vidineev Tue, 14 Jul 2020 22:54:54 -0700 + rabbitmq-server (3.8.3-1) unstable; urgency=medium [ Ondřej Nový ] diff --git a/debian/control b/debian/control index 80f9e8bf7620a0cd52f9bc5d9902a9e1612102d3..09affd6a01f87e8470c6618dce594597bff5a09b 100644 --- a/debian/control +++ b/debian/control @@ -36,7 +36,7 @@ Build-Depends: xmlto, xsltproc, zip, -Standards-Version: 4.2.1 +Standards-Version: 4.4.0 Vcs-Browser: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server Vcs-Git: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server.git Homepage: https://www.rabbitmq.com/ diff --git a/debian/patches/lets-use-python3-not-python-binary.patch b/debian/patches/lets-use-python3-not-python-binary.patch index c28433b650c161dff0317c02e706bcf04f071810..a0ba019ffdace4d73f1242c4f50a3ec20b0c0bd6 100644 --- a/debian/patches/lets-use-python3-not-python-binary.patch +++ b/debian/patches/lets-use-python3-not-python-binary.patch @@ -3,16 +3,16 @@ Author: Thomas Goirand Forwarded: no Last-Update: 2019-09-23 ---- rabbitmq-server-3.7.18.orig/deps/amqp10_common/codegen.py -+++ rabbitmq-server-3.7.18/deps/amqp10_common/codegen.py +--- rabbitmq-server-3.8.4.orig/deps/amqp10_common/codegen.py ++++ rabbitmq-server-3.8.4/deps/amqp10_common/codegen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function ---- rabbitmq-server-3.7.18.orig/deps/amqp10_common/development.post.mk -+++ rabbitmq-server-3.7.18/deps/amqp10_common/development.post.mk +--- rabbitmq-server-3.8.4.orig/deps/amqp10_common/development.post.mk ++++ rabbitmq-server-3.8.4/deps/amqp10_common/development.post.mk @@ -2,7 +2,7 @@ # Framing sources generation. # -------------------------------------------------------------------- @@ -22,16 +22,16 @@ Last-Update: 2019-09-23 CODEGEN = $(CURDIR)/codegen.py CODEGEN_DIR ?= $(DEPS_DIR)/rabbitmq_codegen CODEGEN_AMQP = $(CODEGEN_DIR)/amqp_codegen.py ---- rabbitmq-server-3.7.18.orig/deps/rabbit_common/codegen.py -+++ rabbitmq-server-3.7.18/deps/rabbit_common/codegen.py +--- rabbitmq-server-3.8.4.orig/deps/rabbit_common/codegen.py ++++ rabbitmq-server-3.8.4/deps/rabbit_common/codegen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 ## The contents of this file are subject to the Mozilla Public License ## Version 1.1 (the "License"); you may not use this file except in ---- rabbitmq-server-3.7.18.orig/deps/rabbit_common/development.post.mk -+++ rabbitmq-server-3.7.18/deps/rabbit_common/development.post.mk +--- rabbitmq-server-3.8.4.orig/deps/rabbit_common/development.post.mk ++++ rabbitmq-server-3.8.4/deps/rabbit_common/development.post.mk @@ -2,7 +2,7 @@ # Framing sources generation. # -------------------------------------------------------------------- @@ -41,56 +41,48 @@ Last-Update: 2019-09-23 CODEGEN = $(CURDIR)/codegen.py CODEGEN_DIR ?= $(DEPS_DIR)/rabbitmq_codegen CODEGEN_AMQP = $(CODEGEN_DIR)/amqp_codegen.py ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import sys ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh -+++ rabbitmq-server-3.7.18/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh ++++ rabbitmq-server-3.8.4/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh @@ -1,3 +1,3 @@ #!/bin/sh -python manage.py migrate -python manage.py runserver 0.0.0.0:8000 +python3 manage.py migrate +python3 manage.py runserver 0.0.0.0:8000 ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_management/bin/rabbitmqadmin -+++ rabbitmq-server-3.7.18/deps/rabbitmq_management/bin/rabbitmqadmin -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/env python3 - - # The contents of this file are subject to the Mozilla Public License - # Version 1.1 (the "License"); you may not use this file except in ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 diff --git a/debian/rules b/debian/rules index 08caccf07adf7cb9911d540514ad8947c2532235..e1f756f4bb68c67e7e309b62a5562f8b08594f82 100755 --- a/debian/rules +++ b/debian/rules @@ -48,13 +48,6 @@ override_dh_auto_install: install -p -D -m 0755 scripts/rabbitmq-server-ha.ocf \ $(DEB_DESTDIR)$(PREFIX)/lib/ocf/resource.d/rabbitmq/rabbitmq-server-ha - # Unlocalify -# mkdir -p $(DEB_DESTDIR)$(PREFIX)/lib/rabbitmq/bin -# mv $(DEB_DESTDIR)$(PREFIX)/local/lib/erlang/bin/* $(DEB_DESTDIR)$(PREFIX)/lib/rabbitmq/bin -# mkdir -p $(DEB_DESTDIR)$(PREFIX)/sbin -# mv $(DEB_DESTDIR)$(PREFIX)/local/lib/erlang/lib/rabbitmq_server-3.6.5/sbin/* $(DEB_DESTDIR)$(PREFIX)/sbin -# rm -rf $(DEB_DESTDIR)$(PREFIX)/local - # Remove extra license files rm -f $(DEB_DESTDIR)$(PREFIX)/lib/erlang/lib/rabbitmq_server-*/LICENSE rm -f $(RABBIT_LIB)/LICENSE* $(RABBIT_LIB)/INSTALL* diff --git a/deps/.hex/cache.erl b/deps/.hex/cache.erl index cd6ce2f05f8fe382c490a1c402429aac6cc63de2..a7d94f4245012eebfb399b3b3baef965ff368e3d 100644 --- a/deps/.hex/cache.erl +++ b/deps/.hex/cache.erl @@ -1,2056 +1,2 @@ -[{read_concurrency,false}, - {write_concurrency,false}, - {compressed,false}, - {heir,none}, - {name,'Elixir.Hex.Registry.Server'}, - {named_table,false}, - {type,set}, - {keypos,1}, - {protection,protected}]. -[{{tarball_etag,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<"\"4a1c28d6fcece47b9dc72c7b376ab69d\"">>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.12">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.5">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - <<90,37,120,140,106,49,22,1,230,80,215,11,31,65,165,48,229,2,135,187,16,203, - 136,231,38,235,222,72,243,27,160,19>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - <<212,25,22,44,178,213,190,128,7,8,53,194,194,184,199,140,140,69,144,119,6, - 201,145,210,63,55,80,218,229,6,209,233>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - <<194,18,58,158,240,37,55,126,12,183,146,202,226,3,176,251,111,81,83,62,45, - 9,138,157,207,126,43,240,18,221,33,194>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - <<80,233,140,137,253,228,76,91,121,125,96,45,137,62,163,15,126,225,180,91, - 77,1,174,170,62,167,66,214,185,139,30,238>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - <<195,82,1,177,8,228,28,72,227,114,232,11,96,68,62,247,80,197,149,184,170, - 81,79,194,0,203,163,102,160,198,148,126>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.2">>}, - <<166,252,251,218,190,26,239,145,25,184,113,48,72,70,177,206,40,45,154,65, - 36,188,221,175,199,97,108,26,37,108,117,150>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - <<245,131,207,95,146,14,6,187,25,227,36,29,139,227,242,66,199,98,16,105,185, - 125,1,19,130,88,232,183,165,73,55,89>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.0">>}, - <<83,93,248,66,116,16,163,147,66,189,186,61,17,181,60,80,132,232,115,81,105, - 99,126,190,213,196,76,215,14,171,0,35>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.5">>}, - <<87,63,110,101,253,118,8,187,24,230,175,36,91,213,105,165,181,56,126,4,204, - 76,7,123,31,218,233,153,8,74,169,85>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>}, - <<37,60,24,199,220,111,194,114,144,177,245,7,243,173,198,134,63,67,150,176, - 153,208,235,57,110,60,14,88,220,254,14,228>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.3.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.3">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"benchee">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.3.0">>,<<"0.4.0">>,<<"0.5.0">>,<<"0.6.0">>, - <<"0.7.0">>,<<"0.8.0">>,<<"0.9.0">>,<<"0.10.0">>,<<"0.11.0">>,<<"0.12.0">>, - <<"0.12.1">>,<<"0.13.0">>,<<"0.13.1">>,<<"0.13.2">>,<<"0.14.0">>, - <<"0.99.0">>,<<"1.0.0">>,<<"1.0.1">>]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.1.0">>}, - <<0,44,170,249,57,185,124,132,83,62,240,246,33,211,237,65,78,215,3,252,208, - 60,145,236,13,214,32,67,223,16,44,99>>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<">= 0.3.1">>,false}]}, - {{deps,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.0">>}, - <<37,176,134,181,185,240,219,77,168,137,42,78,21,67,87,112,109,29,219,116, - 166,190,176,5,234,235,228,11,96,67,46,140>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - <<83,185,186,191,253,24,107,180,251,159,221,71,232,164,66,184,241,141,184, - 20,151,255,163,165,91,90,95,89,111,90,200,20>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.6">>}, - <<43,202,208,207,98,31,178,119,202,187,182,65,49,89,205,58,163,2,101,194, - 222,228,44,150,134,151,152,139,48,16,134,4>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>}, - <<240,71,105,128,125,55,3,221,199,75,125,172,252,7,168,137,217,240,195,33, - 243,208,145,182,109,158,2,193,87,193,164,125>>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - <<23,26,137,155,34,80,224,72,191,89,178,41,171,37,52,247,77,137,44,170,243, - 29,184,245,90,242,156,26,6,1,71,84>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - <<16,4,241,79,86,196,247,98,133,76,72,46,15,233,45,98,116,227,208,7,139,61, - 112,228,178,238,179,183,158,39,81,7>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - <<119,30,145,149,5,203,227,153,223,95,73,184,162,28,86,175,82,37,84,44,165, - 200,119,224,186,160,197,3,239,180,230,38>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>}, - <<100,128,181,191,88,169,36,0,19,228,144,60,75,75,247,96,128,68,39,162,206, - 78,78,248,86,100,248,242,7,75,45,130>>}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.0">>}, - <<197,103,12,1,118,217,143,197,134,60,112,72,163,173,92,172,44,1,81,110,133, - 253,40,176,162,35,166,106,125,235,140,234>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.0">>}, - <<2,74,88,8,199,219,172,173,7,228,200,251,223,183,96,201,108,45,40,115,94, - 67,214,95,26,241,22,67,164,211,163,242>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"tiny">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.0">>}, - <<14,162,56,244,6,131,29,242,159,119,29,183,115,21,64,93,136,12,158,247,184, - 24,166,176,224,171,162,102,83,9,225,162>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - <<222,84,131,50,37,176,230,127,33,219,71,51,58,8,104,90,237,80,215,120,162, - 241,28,247,227,106,233,227,254,78,225,7>>}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.3.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.2.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - <<35,233,217,97,4,204,233,231,74,99,53,111,40,10,215,199,171,200,238,104, - 164,95,176,81,208,132,82,54,188,148,56,108>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - <<186,119,162,144,135,118,51,176,15,182,15,212,137,226,228,140,9,196,152, - 138,4,227,160,2,68,188,251,111,6,157,247,36>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - <<239,82,71,134,18,4,215,101,218,196,201,174,239,141,242,228,84,208,44,85, - 221,176,130,198,199,103,181,203,151,45,101,25>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.2">>,false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},{{2020,3,9},{14,52,0}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>}, - <<1,123,136,115,118,56,207,113,196,97,112,248,67,81,6,110,253,61,18,28,104, - 204,142,220,191,198,92,140,70,60,124,188>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<185,103,190,43,35,240,246,120,127,171,126,214,129,180,196,90,33,90,129,72, - 31,182,43,1,165,183,80,250,143,48,247,108>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - <<44,187,218,100,149,12,13,159,201,60,175,106,184,221,155,49,232,55,50,164, - 156,21,248,17,153,78,214,142,229,155,45,213>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.1">>}, - <<144,94,191,180,229,77,90,141,108,61,184,90,151,227,68,244,0,142,188,59, - 117,227,37,235,243,184,143,105,204,82,97,188>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>}, - <<16,236,251,46,47,210,22,214,69,26,247,28,241,79,39,110,6,58,9,110,21,182, - 133,222,117,53,253,104,4,102,201,181>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.2">>}, - <<6,79,119,21,219,121,136,118,175,30,184,40,124,132,98,109,32,87,82,237,176, - 225,163,143,209,38,34,47,103,105,237,172>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},[]}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - <<93,43,197,39,177,127,29,127,117,31,104,29,56,234,57,136,166,142,206,162, - 41,215,41,123,71,219,82,241,176,26,149,42>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.1">>}, - <<127,52,144,106,8,57,243,180,155,155,118,71,70,28,81,68,120,118,17,245,153, - 232,215,67,33,66,128,118,22,153,223,43>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>}, - <<85,88,160,32,2,252,151,72,122,83,69,38,81,20,195,160,164,127,14,44,248,65, - 131,174,100,131,18,12,40,181,169,45>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - <<19,84,186,128,5,249,121,193,119,86,31,224,139,131,202,251,174,67,243,4, - 110,138,108,242,9,19,43,137,103,182,219,23>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{tarball_etag,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<"\"e096e9107af2b900626fb9610693722e\"">>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>}, - <<120,238,232,187,56,240,190,226,231,54,115,215,27,199,95,198,251,1,245,111, - 13,35,231,105,162,110,238,54,85,72,122,56>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - <<10,15,244,148,212,41,101,199,80,103,93,163,225,174,2,244,58,151,127,76, - 237,209,79,159,115,152,247,177,247,37,52,29>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - <<196,149,38,14,55,137,176,144,88,147,32,164,221,109,151,69,54,147,217,186, - 43,222,120,167,11,98,32,205,246,88,203,255>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - <<121,217,236,185,73,178,123,204,43,90,3,121,139,93,113,250,129,148,13,153, - 252,240,217,106,194,6,142,94,242,154,218,192>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.4">>}, - <<102,254,225,234,245,54,52,125,73,57,66,203,94,8,83,33,197,30,128,222,18, - 79,240,15,75,38,81,135,11,145,155,153>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.1">>}, - <<87,231,124,218,254,52,118,157,204,17,76,108,36,152,71,182,99,4,229,72,152, - 145,48,107,151,98,227,33,21,32,215,103>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - <<198,111,234,137,186,120,98,185,73,1,186,240,135,18,133,233,183,60,173,137, - 197,253,181,122,99,134,210,173,207,41,89,62>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>}, - <<208,31,56,94,20,110,182,218,61,93,90,7,40,44,144,82,47,110,7,231,100,195, - 38,27,230,155,172,172,159,182,64,41>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - <<212,204,201,230,181,103,60,98,187,149,202,83,251,122,126,231,244,244,217, - 75,159,14,143,136,177,239,8,191,215,210,33,61>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.2.1">>,false}]}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.1">>}, - <<123,233,243,178,104,142,253,204,104,144,98,204,210,30,52,14,229,253,62, - 249,220,209,66,19,96,52,190,181,237,28,46,35>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.3.0">>}, - <<44,107,172,83,3,113,61,27,67,202,111,60,136,23,103,245,123,42,223,102,140, - 222,48,19,189,113,87,220,101,239,41,156>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.2">>}, - <<228,10,21,153,48,36,160,203,79,94,34,129,109,107,227,64,2,204,68,99,198, - 23,137,237,53,236,148,196,25,17,235,238>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - <<82,54,119,31,28,24,178,146,208,95,163,243,177,122,136,230,32,65,105,41, - 167,111,111,118,7,160,99,84,190,131,223,24>>}, - {{timestamp,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.1">>}, - <<18,120,55,62,72,14,61,187,172,80,45,35,75,247,111,77,173,185,164,174,22, - 208,182,58,172,75,199,249,79,211,178,228>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},[]}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.1">>}, - <<108,84,138,208,244,145,100,149,167,137,119,103,74,37,24,71,134,159,133, - 181,18,91,124,42,68,218,49,120,149,90,223,209>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - <<9,34,102,42,94,22,87,147,197,30,24,201,196,184,166,184,228,130,97,241,131, - 192,210,137,82,91,53,245,135,195,225,84>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.3">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - <<225,176,196,235,165,145,73,137,247,161,169,173,159,137,147,207,116,118,14, - 70,72,134,240,253,34,10,98,51,126,52,121,20>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.3.0">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"3.1.0">>}, - <<254,200,102,14,183,115,62,228,17,123,133,245,87,153,253,56,51,235,118,154, - 109,247,28,207,137,3,232,220,84,71,207,206>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - <<200,135,134,160,114,7,168,11,7,30,163,142,26,113,168,171,215,50,62,203, - 247,5,102,1,39,0,155,32,56,197,161,209>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},[]}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.0">>}, - <<242,244,244,96,98,58,111,21,70,131,171,174,52,53,37,37,225,217,24,56,2, - 103,205,189,148,154,7,186,87,80,50,72>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>}, - <<28,124,91,212,145,116,144,180,221,64,56,135,104,117,230,153,77,150,87,211, - 161,134,95,252,236,98,167,183,59,95,216,9>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>}, - <<255,66,34,18,179,195,245,216,105,141,174,159,245,174,90,98,169,63,129,206, - 76,236,147,76,248,14,196,63,254,173,29,161>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>}, - <<0,205,217,118,142,181,178,146,99,138,149,170,87,141,218,217,84,199,175, - 233,128,141,85,146,244,187,66,220,249,187,175,239>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.1">>}, - <<75,178,27,173,213,26,50,173,80,237,204,229,78,83,18,172,240,121,163,188, - 119,15,38,108,25,151,7,28,127,202,223,23>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - <<82,128,175,154,172,67,47,245,202,66,22,208,62,138,147,243,34,9,81,14,146, - 91,96,231,242,124,51,121,111,105,230,153>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>}, - <<37,197,50,228,112,40,226,226,200,173,244,33,206,111,103,148,142,12,240, - 189,28,82,181,235,239,93,174,30,205,11,213,57>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - <<3,204,80,111,88,227,177,218,36,255,228,114,121,197,14,205,7,16,167,169,40, - 52,192,58,35,38,244,226,34,80,213,77>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.3.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - <<244,176,215,37,57,47,193,87,159,2,33,179,207,112,170,174,89,243,238,225, - 104,54,215,40,142,180,84,243,238,92,236,34>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.0">>}, - <<237,244,27,181,79,195,77,80,10,31,149,28,153,82,162,59,134,174,136,12,189, - 252,117,59,72,225,183,14,63,184,238,19>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.2">>}, - <<68,68,200,121,190,50,59,27,19,62,236,82,65,203,132,189,56,33,234,25,76, - 116,13,117,97,126,16,107,228,116,67,24>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.3">>}, - <<221,84,236,175,169,116,61,21,164,128,166,157,237,246,104,174,139,137,135, - 221,19,11,237,83,29,1,222,45,224,219,114,231>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - <<110,125,164,69,241,34,142,178,227,58,182,153,25,226,63,248,245,119,212, - 177,213,64,199,18,55,58,247,109,196,24,107,86>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.1">>}, - <<127,124,167,45,243,210,158,82,45,55,170,37,73,44,171,71,77,10,229,214,151, - 31,14,228,151,173,141,53,228,113,230,18>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - <<124,16,141,227,48,56,16,40,44,161,17,236,192,147,138,120,230,2,246,180, - 240,203,107,144,253,245,47,149,209,152,5,159>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - <<107,98,70,96,40,214,224,171,62,198,128,92,81,244,168,134,41,230,152,183, - 29,248,224,31,165,92,92,74,49,174,190,107>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - <<130,163,223,22,68,204,169,183,106,75,126,192,23,189,164,63,18,214,96,37, - 232,245,60,212,77,210,176,19,164,69,251,147>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.1">>}, - <<61,98,119,99,233,68,81,236,33,113,230,208,52,205,163,1,55,45,225,205,240, - 11,189,224,214,126,14,174,103,116,102,219>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - <<142,100,15,158,141,162,129,223,90,1,24,144,127,209,142,52,140,31,35,205, - 199,71,41,100,142,232,55,174,217,27,140,41>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.3">>}, - <<84,125,88,219,189,134,76,10,86,12,12,163,120,158,232,132,137,116,232,197, - 23,205,183,130,124,51,3,227,180,46,117,77>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - <<142,227,116,69,141,59,139,35,236,153,58,203,155,86,56,14,206,241,51,59, - 106,235,87,206,25,68,246,182,43,108,69,44>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - <<212,141,245,144,223,87,155,221,0,80,100,173,189,113,121,215,58,16,127,66, - 211,111,231,208,3,30,84,74,107,99,80,70>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - <<220,199,223,5,177,219,110,77,26,62,164,3,245,148,210,223,129,195,79,185, - 24,146,201,196,194,204,109,44,245,156,34,154>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - <<153,68,136,43,113,245,91,37,3,102,61,156,181,77,63,28,123,189,247,204,109, - 208,28,196,14,168,239,81,32,118,1,236>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.0">>},nil}, - {{tarball_etag,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<"\"8f7ca23abc91a273618105e220e26e86\"">>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.4">>}, - <<195,39,7,44,190,185,154,8,86,82,207,17,10,122,61,93,123,153,249,69,104, - 209,73,124,167,105,113,200,128,97,85,90>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.4.0">>}, - <<178,113,90,174,185,245,73,244,227,7,57,212,57,147,227,193,177,5,58,78,214, - 157,80,198,96,98,27,221,30,185,102,6>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.4">>}, - <<180,6,194,252,205,234,160,217,78,35,181,227,10,227,214,53,162,212,97,227, - 99,165,201,198,49,104,151,3,124,240,80,210>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>},[]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>}, - <<100,77,109,87,190,251,34,200,225,155,50,77,238,25,215,59,28,0,69,101,0, - 152,97,168,246,76,104,183,185,230,77,191>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.1">>}, - <<186,136,54,254,234,75,57,75,183,24,161,97,252,89,162,136,254,1,9,181,0, - 109,107,223,151,182,186,223,207,111,15,37>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.1">>}, - <<109,44,115,99,187,137,175,235,209,36,27,0,51,60,161,178,176,156,97,30,253, - 148,104,172,0,236,207,120,210,64,58,4>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.0">>}, - <<114,192,119,214,28,104,4,106,65,50,246,197,185,28,62,118,157,147,111,245, - 38,78,44,46,155,203,221,7,141,223,92,139>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.3.0">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"poison">>}, - [<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>,<<"1.0.3">>,<<"1.1.0">>,<<"1.1.1">>, - <<"1.2.0">>,<<"1.2.1">>,<<"1.3.0">>,<<"1.3.1">>,<<"1.4.0">>,<<"1.5.0">>, - <<"1.5.1">>,<<"1.5.2">>,<<"2.0.0">>,<<"2.0.1">>,<<"2.1.0">>,<<"2.2.0">>, - <<"3.0.0">>,<<"3.1.0">>,<<"4.0.0">>,<<"4.0.1">>]}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.3.0">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.7">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.2">>,false}]}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - <<167,118,4,141,83,165,143,243,181,212,72,231,82,105,45,47,47,255,248,233, - 98,241,72,127,19,182,62,184,86,155,14,126>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.0">>}, - <<42,36,205,38,187,111,153,246,43,113,23,68,183,101,166,2,86,8,105,191,53, - 227,14,136,204,113,61,233,238,209,143,84>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - <<170,203,72,169,240,220,55,111,21,223,48,101,202,33,132,115,141,215,201,81, - 80,174,216,60,40,206,11,171,181,110,91,152>>}, - {{registry_etag,<<"hexpm">>,<<"json">>}, - <<"\"8b0b3962e6c7fff392df3a3998a05793\"">>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.2">>}, - <<166,205,48,197,65,197,88,166,153,53,225,143,53,60,152,143,83,17,120,10,34, - 121,62,7,25,7,215,99,1,102,158,87>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - <<60,195,226,58,205,234,110,131,64,115,25,39,91,193,250,174,216,30,159,132, - 1,73,217,241,199,203,174,78,19,145,128,169>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - <<48,205,79,245,245,147,253,210,24,169,178,111,60,36,213,128,39,79,41,125, - 136,173,67,56,58,254,82,91,21,67,177,101>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - <<81,246,136,145,163,141,81,134,186,106,76,12,20,143,89,179,61,32,176,104, - 22,137,118,253,37,189,252,15,87,52,127,11>>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - <<205,13,176,11,249,85,42,18,87,148,80,64,244,222,235,41,152,176,92,122,1, - 134,215,152,246,224,234,5,150,141,178,69>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.6.2">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<156,225,30,255,90,116,160,123,175,55,135,178,177,157,215,152,114,77,41, - 169,195,164,146,164,29,243,159,106,246,134,218,14>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - <<254,147,80,109,5,37,42,216,45,114,37,127,101,73,170,177,22,100,8,138,19,7, - 242,111,10,177,172,177,114,184,195,91>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - <<109,35,233,51,19,120,181,254,34,48,148,241,46,107,129,154,0,98,25,249,232, - 203,36,48,2,244,67,227,124,183,31,58>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - <<1,188,142,12,255,50,126,103,99,78,150,23,184,80,53,125,59,119,91,58,2,46, - 45,24,194,254,146,217,115,115,178,173>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},[]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},[]}, - {version,3}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.0">>}, - <<120,45,32,1,18,21,106,160,173,174,245,209,65,156,42,204,229,182,91,99,69, - 210,69,48,241,27,87,153,24,77,152,231>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.0">>}, - <<188,191,142,48,184,96,93,175,22,10,140,42,41,213,74,23,46,82,15,75,160, - 227,94,17,122,106,162,64,96,208,159,6>>}, - {{timestamp,<<"hexpm">>,<<"jason">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - <<252,245,217,166,247,209,141,138,92,106,52,103,215,189,249,253,215,44,167, - 105,222,97,216,91,58,2,5,112,196,74,63,240>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - <<58,232,236,78,152,164,72,80,212,148,216,68,28,136,150,99,28,41,91,53,65, - 202,199,145,229,110,160,136,91,167,223,63>>}, - {{versions,<<"hexpm">>,<<"jason">>}, - [<<"1.0.0-rc.1">>,<<"1.0.0-rc.2">>,<<"1.0.0-rc.3">>,<<"1.0.0">>,<<"1.0.1">>, - <<"1.1.0">>,<<"1.1.1">>,<<"1.1.2">>]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.5">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.0">>}, - <<158,206,25,186,234,42,11,160,204,226,167,220,175,197,212,98,51,88,47,253, - 21,126,117,89,227,31,149,135,213,169,181,63>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - <<243,164,124,34,50,116,36,41,23,88,22,125,243,196,96,13,207,139,243,71,149, - 163,120,118,18,1,154,165,184,106,92,33>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.1">>}, - <<33,182,157,95,117,31,169,225,236,145,71,77,68,247,183,80,73,20,184,249, - 214,168,53,45,56,133,111,119,129,224,124,53>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - <<222,148,84,174,200,249,97,163,28,227,188,38,197,39,87,121,10,152,130,7,85, - 93,208,130,110,90,96,165,229,244,16,167>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.2">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - <<88,138,11,103,237,12,69,178,31,1,133,21,252,71,142,250,200,60,8,134,97, - 189,88,136,49,228,28,144,115,168,24,251>>}, - {{tarball_etag,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<"\"efb79ca0ce11a3cc47340f09d124f555\"">>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - <<186,18,120,225,178,159,95,62,106,182,103,31,102,14,69,51,3,211,120,198, - 158,96,125,120,128,129,117,114,146,160,144,252>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<212,46,32,5,65,22,196,157,82,66,211,255,158,25,19,172,204,235,230,1,95,68, - 157,110,49,42,91,193,96,231,154,98>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>}, - <<222,149,85,197,24,59,28,187,92,189,218,199,35,160,58,204,223,104,105,205, - 147,48,244,80,100,221,68,17,238,6,11,161>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"recon">>},{{2020,3,9},{14,52,0}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - <<58,213,138,231,135,233,199,201,77,215,206,218,59,88,126,194,198,70,4,86, - 62,4,155,42,14,139,170,250,232,50,173,219>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>}, - <<109,95,128,33,54,36,158,100,249,212,153,112,67,177,51,85,198,234,195,20, - 33,125,195,177,155,243,103,126,53,26,6,65>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - <<211,204,184,64,223,176,111,47,144,166,211,53,181,54,221,7,77,183,72,179, - 231,245,177,26,182,29,35,149,6,88,94,178>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - <<36,170,165,33,61,173,49,64,42,227,123,151,158,11,91,183,126,152,210,219, - 190,163,38,237,145,161,0,12,145,196,17,19>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.0">>}, - <<172,88,31,32,233,197,199,224,203,127,65,143,86,7,39,141,113,97,28,101,221, - 242,233,48,101,241,244,206,17,221,84,24>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - <<17,125,88,18,60,172,60,104,2,0,82,72,191,3,237,32,165,177,77,221,30,57, - 216,108,122,229,40,150,2,53,82,144>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>}, - <<164,124,235,26,172,111,178,141,112,119,136,220,212,90,122,233,169,153,62, - 122,65,64,97,190,190,192,129,132,225,94,55,121>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>}, - <<65,187,150,11,83,70,108,214,173,17,69,125,17,35,97,202,136,39,117,191,125, - 180,99,135,76,143,51,51,188,33,103,11>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - <<211,69,204,226,233,242,86,144,250,158,83,33,6,112,113,98,221,93,141,153, - 138,197,64,226,68,231,158,219,138,143,60,44>>}, - {{outer_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>}, - <<135,127,234,43,242,218,43,254,7,15,21,41,123,8,7,71,49,179,188,18,38,45, - 143,107,78,19,192,216,24,213,249,168>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.1">>}, - <<188,183,85,161,111,172,145,202,215,155,254,159,195,88,91,176,123,147,49, - 229,12,254,52,32,162,75,204,45,115,87,9,174>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - <<113,54,204,115,154,206,41,95,199,76,55,143,51,105,158,81,69,190,173,79, - 220,27,71,153,130,45,2,135,72,145,54,251>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>}, - <<78,11,98,214,130,174,195,158,78,57,14,68,30,160,215,192,105,236,113,7,125, - 50,29,14,191,107,107,132,184,187,224,14>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.1">>}, - <<155,164,209,166,168,242,208,178,113,109,226,178,165,204,43,170,204,126, - 246,97,224,35,89,184,212,159,28,14,122,140,94,203>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.4">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>}, - <<245,199,26,148,95,141,215,232,196,255,70,217,165,239,28,179,84,167,13,19, - 17,210,130,238,249,36,12,66,39,157,53,206>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - <<126,106,131,77,27,49,48,195,34,70,205,62,157,56,3,252,52,28,167,175,148, - 54,47,51,33,56,139,197,165,119,161,26>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.5">>}, - <<16,58,136,179,90,253,98,119,4,200,46,74,189,12,206,172,147,54,164,224,65, - 214,227,196,113,15,233,60,72,73,65,147>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>}, - <<135,173,234,40,60,156,242,71,103,180,222,237,68,96,41,137,165,51,17,86, - 223,93,96,162,102,14,156,145,20,213,64,70>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - <<44,214,114,64,165,78,156,210,97,107,200,60,12,53,45,71,248,123,204,210, - 236,89,158,206,237,192,11,203,233,6,63,7>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>}, - <<165,51,161,218,40,55,86,236,147,215,126,152,4,45,49,181,239,211,135,95, - 108,92,60,238,204,108,216,45,65,12,228,128>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>}, - <<45,62,40,47,114,196,225,164,195,164,63,97,249,39,178,20,202,237,38,172, - 118,27,96,90,20,228,10,132,97,38,13,166>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>},nil}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.6">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>}, - <<84,122,239,236,28,103,254,50,131,247,123,172,77,175,133,243,245,147,0,39, - 100,247,104,250,170,66,56,117,165,26,35,32>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - <<78,149,60,214,171,60,247,71,60,37,144,249,155,72,255,149,21,190,25,113, - 189,191,237,213,92,218,18,14,251,45,35,205>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>},nil}, - {{repo,<<"hexpm">>},<<"https://repo.hex.pm">>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"3.0.0">>}, - <<98,94,189,100,211,58,226,230,82,1,194,193,77,108,133,194,124,200,182,143, - 45,13,211,120,40,253,233,198,146,13,209,49>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.1.1">>,false}]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.3">>}, - <<54,23,39,196,84,172,47,207,55,141,38,16,79,102,79,157,134,244,254,184,32, - 110,4,45,190,24,116,214,109,132,163,224>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - <<4,169,229,159,101,162,157,117,225,224,34,182,226,186,4,222,45,15,34,138, - 192,11,179,255,223,212,21,128,10,36,196,109>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.1">>}, - <<122,235,9,94,73,65,128,174,217,87,243,88,187,139,146,21,54,10,58,167,226, - 61,174,125,154,240,251,21,72,66,17,100>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - <<139,0,144,177,58,66,52,58,215,9,237,8,129,17,253,64,169,228,194,209,129, - 158,246,193,230,1,52,113,52,237,52,208>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.0.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - <<219,220,236,81,73,70,188,141,202,177,215,125,255,119,25,67,122,133,217, - 134,23,144,134,74,177,33,85,237,163,253,111,175>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - <<227,235,78,191,17,38,38,39,240,183,155,79,209,224,120,250,78,194,190,249, - 12,248,59,124,125,33,79,110,230,167,191,174>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - <<99,150,69,207,172,50,94,52,147,129,103,178,114,186,224,121,31,234,58,52, - 207,50,194,149,37,171,241,211,35,237,76,24>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - <<253,239,107,136,195,29,76,34,224,117,107,33,94,103,115,31,76,39,57,250, - 253,19,168,240,150,226,247,69,122,201,252,195>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - <<75,20,25,238,44,60,158,230,138,146,199,152,64,3,5,112,242,108,133,120,192, - 247,226,66,82,255,85,185,75,237,82,22>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - <<98,26,26,62,83,107,158,33,99,236,107,176,120,77,253,229,236,19,218,138, - 190,196,107,183,101,189,126,177,248,173,21,2>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<134,98,110,28,137,164,173,154,150,208,217,198,56,249,232,140,35,70,184, - 155,75,161,97,25,136,89,78,190,114,181,213,238>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - <<239,16,142,100,198,224,134,54,75,159,21,176,7,60,247,148,6,22,112,175,143, - 51,29,84,93,115,8,192,186,46,103,249>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - <<51,221,215,227,240,137,141,26,124,212,235,117,88,77,41,16,14,43,149,75, - 115,25,59,120,255,172,203,118,182,37,87,124>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.2">>}, - <<99,11,135,164,61,90,213,41,40,103,253,138,103,49,217,123,60,131,58,11,150, - 140,210,3,25,183,9,32,254,241,64,107>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>}, - <<65,15,82,8,188,174,84,27,249,65,179,242,117,110,91,181,164,200,105,77,127, - 253,107,52,185,9,174,136,38,38,41,192>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>}, - <<76,104,194,190,145,0,21,20,239,142,210,98,97,234,3,141,71,153,18,133,124, - 86,82,133,2,177,233,13,195,130,236,139>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - <<227,14,75,190,99,54,83,165,194,218,67,202,180,42,97,98,62,10,204,128,239, - 64,195,33,188,41,240,214,152,105,123,211>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.2">>}, - <<101,91,237,185,64,198,75,180,213,141,96,128,203,130,4,177,249,36,215,227, - 22,137,13,7,134,172,127,144,251,154,104,212>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.0">>}, - <<237,23,149,15,205,126,155,227,41,243,69,35,98,160,227,11,231,58,5,81,27, - 11,147,229,222,71,25,123,128,187,20,150>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.0">>}, - <<10,118,11,81,162,17,78,11,198,237,70,204,202,205,37,92,250,29,159,66,54, - 195,156,177,113,62,201,78,95,174,197,22>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.10">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.4">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.2">>}, - <<221,82,137,92,76,143,33,54,94,138,69,110,63,63,180,18,123,84,143,1,54,24, - 160,87,216,253,118,164,42,200,244,239>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.1.0">>}, - <<245,131,33,140,237,130,38,117,228,132,100,143,162,108,147,61,98,19,115, - 240,28,108,118,189,0,0,93,123,212,184,46,39>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - <<144,235,14,1,159,220,17,222,131,168,140,108,26,139,190,153,105,68,81,76, - 246,187,206,222,7,44,143,34,45,28,113,35>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},nil}, - {{registry_etag,<<"hexpm">>,<<"csv">>}, - <<"\"add7860216d8a18963aeaaf5db67241d\"">>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - <<105,102,54,18,176,225,123,172,122,29,127,26,69,235,225,149,15,19,218,24, - 10,69,123,7,223,63,175,139,223,24,200,149>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - <<204,30,48,54,44,84,234,91,230,196,12,140,160,37,46,105,227,103,226,22,134, - 157,107,154,241,123,89,58,246,167,104,36>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.2">>}, - <<43,187,237,224,72,117,138,214,127,122,117,84,47,144,246,148,202,128,50,50, - 162,182,127,221,127,159,218,152,141,186,154,137>>}, - {{registry_etag,<<"hexpm">>,<<"poison">>}, - <<"\"b536bb2abc7993c69a07e8570e84e113\"">>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>}, - <<25,16,86,131,36,155,248,172,214,240,77,236,61,14,246,80,210,82,104,170,92, - 177,100,233,182,61,109,139,152,177,70,187>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - <<207,101,129,50,228,228,150,173,232,111,35,114,94,237,64,16,52,240,120,216, - 88,212,173,10,147,76,123,58,58,204,20,178>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.5">>}, - <<56,183,89,231,65,206,79,134,87,102,151,38,186,237,121,114,96,39,96,147,19, - 252,40,47,90,103,30,25,132,140,33,53>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - <<50,233,88,32,169,124,255,234,103,131,14,145,81,74,42,213,59,136,136,80,68, - 45,109,57,95,83,161,172,96,200,46,7>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>}, - <<202,206,70,199,228,211,195,137,83,97,35,95,153,209,171,40,0,66,70,95,65, - 24,43,199,248,227,12,128,57,234,141,238>>}, - {{timestamp,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.1">>}, - <<61,90,253,0,39,181,86,155,45,27,246,54,221,215,222,213,246,123,10,207,61, - 96,155,88,64,165,71,198,10,30,157,63>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>}, - <<33,156,184,97,3,253,149,117,90,224,88,186,192,215,182,206,78,182,125,143, - 226,108,75,46,148,126,124,62,166,8,74,14>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - <<18,134,167,155,171,47,24,153,34,1,52,218,249,166,149,88,106,240,14,167,25, - 104,230,205,137,211,211,175,223,124,236,186>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - <<156,134,0,130,46,137,78,60,49,190,216,0,199,138,90,4,129,43,113,166,229, - 165,101,100,38,198,206,1,235,226,207,28>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.2">>}, - <<233,250,128,26,6,80,103,232,165,96,68,74,199,144,121,115,174,138,214,151, - 226,6,200,187,26,66,45,159,37,206,202,197>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.0">>}, - <<193,161,143,73,89,230,43,235,247,57,148,115,147,245,50,120,152,244,141,35, - 155,229,70,99,224,124,118,140,27,4,35,95>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.4.0">>}, - <<205,90,251,157,183,240,209,148,135,87,47,162,129,133,182,212,222,100,127, - 20,35,87,70,130,78,119,179,19,155,121,183,37>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - <<215,39,177,232,193,56,141,13,63,26,138,145,247,217,17,174,245,221,100,108, - 150,7,67,88,21,165,137,133,130,165,50,15>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},[]}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>}, - <<158,101,146,10,32,96,187,77,208,152,73,19,65,107,108,14,183,75,77,107,232, - 175,32,45,37,244,137,191,158,60,8,166>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - <<22,126,93,61,210,231,113,110,88,101,245,168,208,100,215,169,247,0,69,22, - 199,150,104,64,131,241,205,24,12,45,66,150>>}, - {{registry_etag,<<"hexpm">>,<<"tiny">>}, - <<"\"482fc7abaea593d79083b8f93832165c\"">>}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.8.0">>,false}]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>}, - <<84,102,52,26,40,153,179,37,138,232,168,133,67,208,189,207,235,42,41,50, - 199,49,193,102,143,19,211,49,85,17,94,25>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - <<137,173,179,41,68,72,116,128,150,65,204,47,100,90,236,43,211,141,253,132, - 30,127,228,193,179,188,162,230,249,26,26,243>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.3">>}, - <<11,227,252,24,76,188,187,142,189,106,131,138,205,120,113,127,255,251,223, - 137,247,195,149,152,149,248,127,212,147,195,55,79>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>}, - <<236,46,10,245,110,159,244,179,185,65,1,43,210,244,121,186,27,11,70,167,34, - 228,39,178,62,59,94,154,116,170,30,7>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>}, - <<104,88,36,229,132,191,61,160,87,32,192,27,172,250,97,83,74,146,65,218,18, - 153,47,252,202,228,121,91,78,60,255,13>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>},{{2020,3,9},{14,52,5}}}, - {{registry_etag,<<"hexpm">>,<<"benchee">>}, - <<"\"becf241c7fec673bb6b768c8749f549b\"">>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.2.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - <<73,140,248,154,223,216,198,35,93,172,33,119,155,217,73,161,64,219,168,206, - 68,37,100,73,113,229,156,39,240,188,73,145>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - <<59,151,167,246,49,247,35,53,197,202,105,173,82,159,74,171,245,78,9,177,14, - 190,12,114,5,182,175,122,13,146,27,148>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.1">>}, - <<217,80,154,44,34,147,65,79,12,138,178,35,105,23,194,141,154,6,6,227,139, - 49,72,11,47,118,177,203,206,191,151,106>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>}, - <<19,59,231,97,129,14,192,233,78,5,212,21,105,68,255,195,93,2,214,168,143, - 168,253,252,42,242,155,165,62,173,179,119>>}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.8.0">>,false}]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - <<34,47,127,11,94,117,136,177,233,233,183,62,72,148,15,18,212,59,190,8,196, - 116,176,143,213,126,249,135,71,209,197,102>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - <<24,34,98,146,249,177,109,241,247,196,117,36,59,152,185,133,59,170,233,18, - 101,88,198,253,222,53,77,27,159,120,134,56>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.2">>}, - <<217,196,187,165,244,253,121,45,191,150,34,0,67,83,251,201,249,118,86,33, - 218,135,58,172,135,166,143,252,81,205,108,102>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.3">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.1">>}, - <<93,247,164,66,223,130,94,189,46,62,187,41,162,225,127,106,224,29,28,211, - 74,91,252,182,200,47,50,23,125,76,241,48>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - <<102,119,195,9,132,22,101,46,0,16,158,203,221,72,26,117,90,45,1,123,86,124, - 29,233,255,150,17,77,155,211,112,222>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - <<247,113,245,135,196,139,72,36,180,151,226,163,227,116,247,94,147,239,1, - 252,50,152,115,176,137,163,245,221,150,27,128,184>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},[]}, - {{registry_etag,<<"hexpm">>,<<"benchee_html">>}, - <<"\"f7e35251d9bb8a754f82e920761ae7d0\"">>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - <<7,202,4,16,92,47,46,71,50,244,235,97,134,62,24,231,241,183,181,11,109,30, - 227,30,126,23,205,198,18,154,77,225>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>}, - <<124,244,152,104,247,49,234,243,108,241,245,95,175,212,116,192,199,114,218, - 187,214,90,139,9,202,35,89,24,160,252,11,246>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},nil}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.0">>}, - <<227,19,177,246,201,71,212,213,150,103,66,219,100,159,247,226,103,54,224, - 132,176,162,127,161,246,74,202,120,50,120,28,196>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.3.0">>}, - <<139,206,65,63,178,82,52,228,110,97,243,99,163,106,208,125,204,229,50,39, - 152,45,198,78,39,33,182,228,14,218,121,129>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - <<172,251,194,45,45,206,209,25,136,180,61,243,69,68,241,184,117,230,1,196, - 19,143,180,148,98,227,234,158,87,172,94,155>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - <<72,67,100,98,6,104,157,95,209,160,235,61,14,8,188,194,70,39,52,17,101,196, - 9,111,104,119,219,243,240,116,38,190>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>}, - <<128,220,240,222,73,203,3,63,153,109,104,148,40,239,110,246,39,234,5,148, - 48,125,245,11,76,26,253,160,152,224,73,57>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},[]}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.0">>},nil}, - {{versions,<<"hexpm">>,<<"observer_cli">>}, - [<<"1.0.2">>,<<"1.0.3">>,<<"1.0.4">>,<<"1.0.5">>,<<"1.0.7">>,<<"1.0.8">>, - <<"1.0.9">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.3.0">>, - <<"1.3.1">>,<<"1.3.2">>,<<"1.3.3">>,<<"1.3.4">>,<<"1.4.0">>,<<"1.4.1">>, - <<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"1.4.5">>,<<"1.5.0">>,<<"1.5.1">>, - <<"1.5.2">>,<<"1.5.3">>]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - <<139,29,56,94,0,231,8,1,161,47,107,212,62,182,79,116,124,79,114,200,142,82, - 63,143,13,50,118,165,19,92,160,11>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - <<149,118,239,96,88,227,41,46,166,187,103,13,17,248,78,112,72,72,8,195,85, - 212,132,253,23,194,167,73,212,11,194,62>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.1">>}, - <<189,14,10,17,147,53,136,155,170,147,205,6,251,153,1,163,63,243,132,204, - 247,131,245,35,135,32,122,194,183,161,148,56>>}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.4">>}, - <<81,222,127,212,160,25,247,150,107,51,19,62,173,183,197,186,145,158,93,130, - 159,185,169,5,79,1,43,225,62,143,157,1>>}, - {{versions,<<"hexpm">>,<<"csv">>}, - [<<"0.1.0">>,<<"0.1.1">>,<<"0.2.0">>,<<"0.2.1">>,<<"0.2.2">>,<<"1.0.0">>, - <<"1.0.1">>,<<"1.1.0">>,<<"1.1.1">>,<<"1.1.2">>,<<"1.1.3">>,<<"1.1.4">>, - <<"1.1.5">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.2.3">>,<<"1.2.4">>, - <<"1.3.0">>,<<"1.3.1">>,<<"1.3.2">>,<<"1.3.3">>,<<"1.4.0">>,<<"1.4.1">>, - <<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"2.0.0-rc.0">>,<<"2.0.0">>, - <<"2.1.0">>,<<"2.1.1">>,<<"2.2.0">>,<<"2.3.0">>,<<"2.3.1">>]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - <<64,60,123,48,80,27,93,51,205,168,188,107,254,48,127,89,219,1,95,199,37,86, - 122,86,4,218,231,246,5,165,30,23>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.0">>}, - <<55,22,115,65,12,47,255,214,210,143,212,1,46,20,129,42,194,174,6,189,33, - 143,251,177,14,66,125,144,48,22,123,164>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - <<253,248,67,188,168,88,32,58,225,222,22,218,46,226,6,245,52,22,187,218,93, - 200,201,231,143,67,36,61,228,188,58,254>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - <<59,28,140,11,227,44,39,32,207,5,135,132,129,87,236,95,14,20,247,84,219,99, - 34,156,52,187,19,90,94,236,181,40>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - <<181,87,39,178,6,218,185,111,235,2,82,103,229,193,34,221,180,72,245,91,102, - 72,249,21,107,141,72,18,21,216,2,144>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - <<150,52,188,163,15,47,116,104,221,227,231,4,213,134,83,25,177,235,136,228, - 168,205,237,92,153,91,175,10,169,87,82,79>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - <<156,4,35,121,62,187,118,245,82,245,191,173,131,219,120,194,17,60,104,78, - 153,237,178,24,144,111,162,40,179,216,152,119>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - <<121,180,219,142,142,93,115,110,206,124,216,109,238,5,68,39,61,188,79,192, - 147,122,157,207,219,65,51,176,151,41,238,29>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>}, - <<215,231,114,197,69,168,223,20,71,144,195,137,29,9,227,190,159,145,121,101, - 235,192,190,211,1,248,253,141,59,49,144,89>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - <<152,228,237,44,134,182,51,223,155,1,144,214,179,191,56,188,46,56,91,166, - 32,15,104,32,31,181,117,211,153,9,129,108>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.3">>}, - <<21,65,73,21,16,131,0,130,100,90,163,191,158,38,141,151,254,169,191,217, - 126,7,137,84,112,244,23,246,108,243,192,116>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.2.0">>}, - <<81,155,194,9,228,67,57,97,40,65,116,196,151,200,82,76,0,30,40,91,121,189, - 248,2,18,180,122,31,137,128,132,204>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - <<114,39,232,58,184,30,71,83,97,1,37,210,81,187,247,140,153,22,127,190,127, - 147,26,140,191,188,62,218,133,38,37,156>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - <<185,108,64,14,4,183,183,101,192,133,76,5,164,150,99,35,233,12,13,17,254, - 224,72,59,21,103,205,160,121,171,178,5>>}, - {{versions,<<"hexpm">>,<<"exjsx">>}, - [<<"3.0.0">>,<<"3.0.1">>,<<"3.0.2">>,<<"3.1.0">>,<<"3.2.0">>,<<"3.2.1">>, - <<"4.0.0">>]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>},[]}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - <<102,178,17,249,191,216,75,217,126,109,27,234,221,248,252,35,18,170,171, - 225,146,247,118,232,147,28,176,193,111,83,165,33>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - <<145,11,107,111,136,138,168,176,247,155,220,168,171,244,206,33,214,76,152, - 252,135,182,186,139,106,231,242,237,34,85,28,250>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>}, - <<118,22,145,160,177,206,15,76,126,133,17,176,155,95,44,211,24,192,13,165, - 39,3,149,99,126,78,13,90,127,71,188,69>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.0">>}, - <<110,216,76,213,101,167,236,112,146,0,220,53,152,58,23,181,31,118,152,56, - 180,196,142,200,193,64,28,253,16,50,224,254>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.4">>},nil}, - {{registry_etag,<<"hexpm">>,<<"exjsx">>}, - <<"\"97732ea099c024610deb280b5c305069\"">>}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.2.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.2">>}, - <<250,117,237,79,53,92,212,171,70,140,37,88,129,113,248,0,42,114,116,211, - 213,251,55,108,24,130,45,223,199,195,63,31>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>},[]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - <<8,68,93,118,243,173,53,7,188,74,243,14,175,216,130,96,192,243,92,80,56,84, - 42,242,119,171,208,151,91,225,234,38>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - <<121,81,11,127,243,186,89,124,117,140,230,243,151,226,59,63,194,252,114, - 157,214,51,40,129,196,104,183,103,183,28,119,193>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - <<195,69,224,144,224,166,27,243,62,3,133,170,58,211,148,252,183,216,99,227, - 19,188,63,202,82,46,57,12,127,57,22,110>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - <<76,120,211,230,117,249,239,248,133,203,226,82,200,154,143,193,210,251,128, - 60,13,3,169,20,40,30,88,120,52,224,148,49>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - <<72,36,218,219,1,225,67,149,246,94,157,24,218,41,77,83,67,38,215,238,215, - 121,150,243,194,47,116,169,135,1,121,235>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>},nil}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - <<7,70,231,172,135,119,124,3,107,104,136,211,75,235,196,163,110,83,65,104, - 59,87,163,225,184,103,14,93,9,182,129,82>>}, - {{versions,<<"hexpm">>,<<"recon">>}, - [<<"2.2.0">>,<<"2.2.1">>,<<"2.3.0">>,<<"2.3.1">>,<<"2.3.2">>,<<"2.3.3">>, - <<"2.3.4">>,<<"2.3.5">>,<<"2.3.6">>,<<"2.4.0">>,<<"2.5.0">>]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - <<140,130,155,178,142,63,49,106,54,18,22,49,68,5,254,41,109,141,210,253,116, - 9,223,165,63,164,172,28,255,55,151,160>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - <<159,1,192,129,120,215,122,101,122,54,82,135,8,70,212,202,238,122,123,113, - 202,50,151,29,247,206,87,192,121,218,111,222>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},[]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.1">>}, - <<109,146,154,92,130,248,99,214,32,28,161,252,218,171,38,179,85,143,41,221, - 224,211,160,34,229,242,200,221,175,180,203,22>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - <<115,202,129,241,107,232,194,63,12,196,113,10,2,108,189,79,223,95,106,26, - 181,126,18,239,173,150,230,121,68,48,145,183>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.1">>}, - <<40,31,44,187,67,159,227,192,67,119,62,230,200,49,114,171,216,3,38,220,198, - 21,63,100,48,228,212,230,177,77,126,157>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.2.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - <<251,60,197,214,171,222,88,2,7,87,132,147,178,216,96,62,100,143,44,93,168, - 223,234,187,26,186,196,121,147,150,228,33>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>}, - <<32,81,15,21,98,72,37,163,109,219,84,162,68,143,219,195,192,253,104,216,90, - 139,229,208,195,81,73,244,140,232,140,95>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},[]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.0">>}, - <<163,31,253,175,119,73,79,241,45,108,44,156,176,50,53,212,55,53,150,210, - 250,246,46,229,185,156,26,228,121,97,132,0>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - <<105,239,141,192,74,76,174,199,209,37,41,162,55,199,180,155,139,177,255,48, - 198,228,44,186,234,71,245,179,206,145,253,189>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},nil}, - {{tarball_etag,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<"\"b592027da679624534bf2a6fb5875207\"">>}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - <<237,219,26,93,59,77,123,35,81,161,38,128,137,110,199,146,141,6,221,79,48, - 163,15,78,229,139,66,151,205,242,65,111>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - <<84,1,54,83,199,46,117,255,59,75,72,115,66,223,229,103,21,201,116,159,249, - 195,26,125,232,248,77,24,160,158,28,60>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>}, - <<169,93,11,105,81,121,24,152,163,206,220,239,254,220,191,5,237,12,236,64, - 183,236,156,58,96,112,180,210,34,162,42,171>>}, - {{registry_etag,<<"hexpm">>,<<"jason">>}, - <<"\"9fe9e8261d72eb1a76db548255891cc9\"">>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - <<80,24,35,9,68,201,101,196,109,80,116,126,15,148,188,24,34,15,177,124,65, - 58,146,14,145,238,25,134,200,164,239,91>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - <<61,185,230,46,44,28,161,19,175,18,170,70,80,45,240,194,135,37,230,108,123, - 136,85,141,215,79,126,9,208,150,16,97>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.0">>}, - <<0,214,237,215,48,254,153,35,132,121,150,70,157,1,139,250,210,149,54,105, - 189,43,99,91,7,84,206,45,213,159,166,37>>}, - {{versions,<<"hexpm">>,<<"tiny">>},[<<"1.0.0">>,<<"1.0.1">>]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - <<120,201,76,85,220,135,233,31,246,237,228,245,244,103,37,10,222,151,49,232, - 233,82,110,222,32,154,82,16,238,82,134,146>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - <<222,146,226,188,133,188,9,236,103,111,25,246,236,45,170,89,186,31,1,3,209, - 218,150,207,12,202,54,52,44,144,217,63>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - <<176,130,101,218,0,52,39,160,71,207,77,50,70,74,228,200,25,201,193,58,33, - 248,106,182,237,228,254,60,75,17,130,13>>}, - {{retired,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.2">>}, - <<185,80,65,252,17,144,118,152,187,77,64,117,190,80,75,6,0,168,234,119,129, - 196,236,127,27,240,142,115,235,238,108,37>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.1">>}, - <<33,232,214,152,48,145,102,15,57,79,68,167,193,31,140,241,244,103,175,178, - 170,218,31,207,89,194,241,181,144,164,47,104>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - <<29,227,205,145,60,190,39,174,240,172,159,191,122,176,110,194,117,248,93, - 162,139,55,96,100,128,73,153,209,214,51,54,122>>}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - <<247,30,210,221,230,58,44,168,206,231,133,5,145,64,254,121,160,122,142,67, - 65,133,52,199,94,32,21,56,185,12,31,185>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.3">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - <<213,76,4,154,169,73,135,48,92,115,232,78,66,2,91,38,231,216,196,73,125, - 253,121,224,196,135,233,238,94,170,246,110>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"3.1.0">>}, - <<217,235,99,102,16,224,150,248,111,37,217,164,111,53,169,250,202,195,86,9, - 167,89,27,59,227,50,110,153,160,72,70,101>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"earmark">>,<<"earmark">>,<<">= 0.0.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>}, - <<8,57,84,123,158,93,199,206,138,139,153,28,158,125,154,234,48,58,197,223, - 224,74,57,54,130,230,113,175,14,4,182,228>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.3">>}, - <<99,43,159,92,76,46,86,152,127,18,59,159,53,229,43,53,108,45,226,140,231, - 105,45,102,190,207,18,223,16,204,16,18>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - <<67,61,148,107,14,71,85,225,134,254,86,69,104,234,212,245,147,176,209,83, - 55,252,255,169,94,215,213,184,166,97,38,112>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - <<110,77,136,127,221,142,139,234,129,238,215,150,170,88,155,200,14,52,183, - 137,97,121,182,132,249,117,202,184,58,27,23,62>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - <<14,193,72,255,99,89,118,57,179,255,140,195,239,82,60,251,70,105,244,250, - 26,46,146,30,5,132,156,143,149,12,124,109>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>}, - <<110,207,210,201,30,22,244,142,21,53,116,59,87,208,26,66,198,93,125,213,26, - 139,67,229,114,59,31,121,146,113,105,168>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.4">>}, - <<136,22,143,146,203,209,35,224,41,13,135,208,161,202,128,3,232,99,170,67, - 10,225,114,87,177,231,195,222,195,33,119,158>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - <<16,133,39,148,221,224,88,193,239,122,91,157,83,212,8,217,4,194,7,110,159, - 171,116,172,67,252,103,109,50,227,218,211>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},nil}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - <<107,28,158,90,196,46,147,42,252,22,12,197,14,199,233,99,80,198,218,241, - 185,31,141,68,60,125,126,195,82,41,208,197>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.1">>}, - <<78,125,235,70,12,170,104,171,2,130,210,4,228,58,85,50,98,180,93,64,169,61, - 208,16,154,133,137,103,171,28,143,191>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.1.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.3">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - <<57,207,144,243,58,96,58,98,157,34,38,230,75,17,40,154,45,77,70,176,162, - 107,166,24,211,104,11,188,120,28,232,230>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},nil}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<">= 0.99.0 and < 2.0.0">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 1.0">>,false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>}, - <<210,233,151,147,38,189,170,207,80,171,14,82,200,15,83,215,76,222,217,61, - 26,226,31,171,207,102,52,98,56,204,3,34>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.5">>}, - <<81,54,235,143,128,32,164,64,245,248,148,241,193,30,127,169,72,3,21,178, - 230,227,152,176,228,102,9,203,150,62,118,138>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - <<122,12,59,31,191,255,219,234,254,33,139,68,53,153,79,38,248,249,130,170, - 186,128,63,164,215,3,211,138,183,43,43,116>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.1">>}, - <<251,215,141,211,229,171,186,220,23,221,216,153,5,0,47,109,32,160,48,70, - 247,85,90,96,152,210,138,159,20,254,175,88>>}, - {{tarball_etag,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<"\"d354c9fcbfd54556b8e8eef6c058a152\"">>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},[]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.1">>}, - <<169,229,80,242,36,189,255,58,16,215,240,101,26,114,153,139,19,9,138,176, - 142,116,249,197,115,127,195,192,9,193,73,244>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.2">>}, - <<77,59,189,15,115,5,117,64,83,222,177,167,29,64,142,111,86,197,20,166,97, - 46,12,55,146,237,131,198,208,64,83,56>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - <<0,37,224,56,226,242,232,197,200,36,13,24,188,252,17,177,239,225,162,86, - 113,101,111,197,178,253,214,112,245,72,222,52>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - <<228,42,101,145,72,233,247,177,231,215,28,123,93,36,153,124,215,189,123, - 114,215,227,30,165,194,219,22,116,184,238,231,136>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - <<27,197,191,30,79,210,73,16,65,120,240,136,80,48,188,215,90,69,38,244,210, - 161,233,118,244,180,40,211,71,97,79,15>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.5.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - <<153,47,46,20,24,132,154,50,111,209,217,40,120,1,250,45,134,9,29,180,249, - 97,31,96,120,29,166,210,54,246,76,212>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - <<119,62,225,102,102,158,178,27,82,151,206,65,179,199,180,116,190,9,110,184, - 237,5,45,69,112,129,40,154,28,242,80,122>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>}, - <<169,112,194,61,151,0,174,120,66,181,38,197,118,119,230,227,241,8,148,180, - 41,82,70,150,234,213,71,233,48,35,145,192>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.3">>}, - <<209,152,101,72,132,113,137,181,31,30,251,101,209,150,230,171,159,46,136, - 166,135,138,54,58,236,14,60,119,226,85,6,22>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.0">>}, - <<65,109,94,153,196,194,139,118,254,70,45,153,185,188,212,77,72,28,207,75, - 64,118,138,103,220,169,212,16,127,162,167,173>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - <<130,13,172,184,217,233,253,211,206,164,132,51,239,127,49,178,246,251,249, - 233,63,255,40,220,35,138,5,190,195,76,57,87>>}, - {{versions,<<"hexpm">>,<<"stdout_formatter">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.2.1">>,<<"0.2.2">>,<<"0.2.3">>]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - <<34,76,89,87,237,225,240,215,135,68,94,165,238,52,99,79,186,176,6,253,161, - 30,77,66,240,37,11,97,16,216,237,49>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>}, - <<156,36,97,56,134,110,216,22,150,116,239,84,148,232,205,120,44,210,38,130, - 113,83,121,236,189,172,19,247,170,149,212,231>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.2">>},[]}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - <<232,37,108,31,91,115,43,205,72,90,169,75,192,19,113,243,36,225,20,154,143, - 38,38,35,64,124,162,204,19,171,8,74>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.3">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - <<200,66,29,78,110,110,240,221,124,43,100,255,99,88,159,133,97,17,104,8,250, - 0,61,221,253,83,96,205,231,187,70,37>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.2.0">>}, - <<71,99,182,154,138,119,189,119,210,111,71,125,25,100,40,183,65,38,26,118, - 18,87,255,28,249,39,83,160,212,210,74,99>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>}, - <<189,191,147,143,9,109,63,57,160,105,59,91,253,243,226,107,192,112,4,217, - 179,55,248,204,180,36,64,115,180,82,185,227>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - <<165,235,69,46,242,66,123,154,112,20,171,100,152,141,178,66,81,134,95,142, - 111,174,125,163,240,100,177,227,178,61,51,219>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.1">>}, - <<146,48,109,88,81,27,235,226,12,242,50,205,65,94,151,159,216,143,175,226, - 159,194,63,30,158,27,67,127,162,208,6,180>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - <<157,237,151,116,241,241,18,204,84,77,130,229,249,169,5,160,22,134,47,147, - 186,137,249,131,214,167,226,80,145,239,226,61>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>}, - <<14,242,17,138,101,206,8,117,186,112,255,37,243,141,34,183,238,117,142,105, - 157,107,69,214,18,238,190,251,138,78,156,223>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.0">>}, - <<137,28,32,233,180,214,31,0,187,29,21,255,46,29,244,81,14,48,42,7,254,77, - 205,184,84,193,108,34,59,72,29,163>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - <<206,219,47,35,1,113,230,209,4,35,174,232,206,144,81,40,51,176,126,151,135, - 71,204,131,107,15,44,3,127,207,119,157>>}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - <<189,147,202,5,190,120,188,182,21,156,113,118,35,14,254,218,47,114,79,127, - 253,72,85,21,23,92,164,17,223,244,137,62>>}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.0">>}, - <<245,5,175,141,207,193,255,0,92,117,109,254,27,39,65,9,23,223,171,168,134, - 128,134,39,11,216,165,8,205,67,113,193>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>},nil}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.3">>}, - <<62,26,107,110,184,70,116,187,13,10,189,144,160,61,7,208,27,242,46,141,86, - 147,149,102,74,41,138,252,89,164,234,49>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - <<243,239,123,26,226,138,85,229,59,140,181,193,29,14,11,100,231,110,56,213, - 243,232,48,191,46,59,242,204,10,137,216,72>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.1">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.2.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>}, - <<32,50,152,90,157,33,167,28,203,229,214,196,231,128,37,49,94,140,60,195, - 226,85,245,7,161,55,153,84,146,227,240,190>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - <<241,44,133,153,45,45,129,212,251,122,96,34,90,55,175,239,58,240,6,152,35, - 204,50,26,37,233,223,157,59,203,110,210>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - <<165,252,198,94,200,215,66,117,153,236,145,91,159,135,228,53,41,209,80,151, - 173,249,228,60,150,236,86,115,175,87,212,46>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>}, - <<23,12,23,28,231,246,221,112,200,88,6,81,84,163,48,91,133,100,131,60,109, - 204,161,126,16,182,118,202,49,234,151,111>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - <<164,193,167,195,13,33,81,182,228,151,108,178,245,44,10,29,73,236,150,90, - 251,115,126,216,74,104,75,196,40,77,22,39>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},nil}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.2">>}, - <<86,11,223,183,68,158,61,221,35,160,150,146,159,185,252,33,34,247,9,188, - 199,88,178,213,213,165,199,208,234,132,137,16>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.3">>}, - <<55,62,180,247,50,31,137,138,214,119,41,153,243,13,175,101,249,243,142,29, - 61,212,215,152,215,168,45,59,18,63,225,211>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"benchee_html">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.3.0">>,<<"0.3.1">>,<<"0.4.0">>,<<"0.5.0">>, - <<"0.6.0">>,<<"1.0.0">>]}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.3.0">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - <<9,86,102,121,241,147,49,21,246,24,158,108,78,32,94,53,170,234,28,174,220, - 248,67,135,92,62,182,94,236,131,228,136>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.3.1">>,false}]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<107,156,170,216,147,0,6,249,187,53,104,12,93,51,17,145,122,198,118,144, - 195,175,27,160,24,98,51,36,192,21,171,229>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.0">>}, - <<27,101,19,39,242,48,107,254,16,227,73,222,227,142,116,11,12,85,4,38,19, - 142,188,67,255,207,5,134,97,188,172,191>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.0">>}, - <<132,183,103,162,219,142,204,47,7,187,132,252,180,245,79,37,22,12,7,161, - 218,226,124,70,11,63,12,64,191,203,247,159>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - <<223,18,100,181,135,27,186,248,218,79,17,254,173,250,13,198,97,244,213,17, - 73,58,37,248,249,199,214,21,224,214,20,213>>}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - <<79,120,74,86,127,41,153,226,141,54,193,51,86,73,95,69,95,173,79,184,140, - 102,169,194,219,96,171,43,96,209,20,121>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - <<24,229,217,170,84,18,236,6,60,249,113,155,207,231,59,249,144,197,254,213, - 201,163,200,66,44,43,93,149,41,252,139,13>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.3">>}, - <<87,98,95,24,53,198,99,53,131,106,213,107,2,224,21,248,208,190,199,234,139, - 100,211,5,241,134,255,216,60,134,175,63>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.1">>}, - <<130,21,194,175,29,228,95,184,230,195,55,162,116,96,70,107,74,199,100,242, - 153,214,66,233,10,59,99,52,115,106,73,247>>}, - {{registry_etag,<<"hexpm">>,<<"stdout_formatter">>}, - <<"\"798f35dfaecff22d405cc75c551e3b6e\"">>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.4.0">>}, - <<144,31,247,139,57,199,84,251,77,111,215,45,207,13,189,57,137,103,187,210, - 228,213,156,8,212,215,170,68,167,61,233,29>>}, - {{registry_etag,<<"hexpm">>,<<"jsone">>}, - <<"\"19b0e6e65a50f4bab9d3f6c4d71897fa\"">>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.4">>}, - <<37,105,199,33,33,80,209,87,165,122,53,119,190,202,207,162,227,70,163,175, - 234,105,135,8,133,22,134,172,220,210,141,4>>}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - <<50,25,48,170,147,181,145,180,139,214,172,185,202,47,23,172,134,195,217,48, - 91,100,215,40,142,33,246,124,247,186,51,129>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - <<216,179,241,114,0,115,65,60,54,162,30,86,161,209,17,42,77,103,169,173,14, - 201,0,67,126,254,208,139,57,229,21,178>>}, - {{inner_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>}, - <<83,94,167,230,0,203,28,107,161,123,83,2,146,102,217,215,236,84,206,41,191, - 176,93,144,108,67,57,7,172,250,1,202>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>}, - <<134,43,66,142,238,151,53,86,202,20,87,227,90,179,116,64,212,100,70,163,29, - 10,225,195,21,84,14,86,121,107,130,18>>}, - {{registry_etag,<<"hexpm">>,<<"observer_cli">>}, - <<"\"f8006e5d5a78b08a38db1429917779a9\"">>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},[]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.0">>}, - <<143,86,163,52,2,26,42,207,236,45,147,7,8,208,240,25,53,241,101,76,138,222, - 121,119,187,241,248,235,72,67,9,114>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - <<176,61,237,234,103,169,146,35,162,234,249,241,38,76,227,113,84,86,77,232, - 153,253,61,139,154,33,177,166,253,100,175,231>>}, - {{retired,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - <<221,158,21,194,160,108,229,114,231,154,103,96,57,12,160,35,72,192,241,193, - 134,58,34,145,8,98,133,129,134,36,121,114>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"jsone">>}, - [<<"1.0.0">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.2.3">>, - <<"1.2.4">>,<<"1.2.5">>,<<"1.2.6">>,<<"1.3.0">>,<<"1.3.1">>,<<"1.3.2">>, - <<"1.4.0">>,<<"1.4.1">>,<<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"1.4.5">>, - <<"1.4.6">>,<<"1.4.7">>,<<"1.5.0">>,<<"1.5.1">>,<<"1.5.2">>]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - <<37,36,182,192,229,65,48,157,150,154,204,247,95,119,225,209,101,62,70,20, - 42,252,104,233,234,79,243,85,89,167,148,188>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.3">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<79,89,119,17,222,247,188,179,135,133,25,245,127,149,88,219,60,157,134,138, - 238,65,83,94,220,220,32,170,192,179,158,104>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.3">>}, - <<160,88,176,66,166,90,171,75,107,220,254,73,23,150,200,208,67,105,54,44, - 172,223,141,93,75,234,156,81,112,151,208,56>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.0">>}, - <<218,15,103,101,22,13,120,222,103,107,141,110,93,175,57,171,250,254,43,57, - 3,184,187,249,186,217,7,116,185,172,32,81>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - <<162,54,21,16,103,251,60,169,201,96,54,128,105,50,209,5,210,224,199,188, - 179,119,133,19,239,254,106,108,59,35,58,96>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>}, - <<137,43,68,99,179,173,216,203,10,28,104,252,69,224,60,98,151,137,89,121, - 189,12,119,40,52,96,186,217,13,2,157,195>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.1">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},nil}, - {{registry_etag,<<"hexpm">>,<<"parallel_stream">>}, - <<"\"469337f5bc4abe45efff41d7f35a8e8c\"">>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - <<226,111,246,64,124,87,46,227,117,253,144,19,151,219,230,226,40,138,182, - 110,71,245,89,90,225,173,188,186,123,187,147,88>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - <<18,192,208,123,207,0,180,26,155,61,161,233,207,82,235,5,192,76,185,237,23, - 20,177,174,34,9,208,212,27,25,175,60>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - <<91,77,36,239,254,189,6,15,70,111,180,96,236,6,87,110,123,52,160,15,194, - 107,35,79,228,241,44,79,5,201,89,71>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.3">>}, - <<28,55,228,101,104,121,52,189,79,135,20,25,68,145,107,252,74,110,96,231,95, - 211,42,107,78,234,230,154,136,205,203,158>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - <<153,157,191,5,166,154,48,207,230,159,28,50,23,123,19,188,187,118,12,110, - 235,200,231,70,167,54,130,189,127,223,71,171>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - <<144,237,193,93,248,153,119,172,98,173,124,194,8,202,22,226,66,122,169,193, - 130,137,238,155,243,134,208,96,117,166,219,140>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - <<110,242,4,161,146,102,97,79,26,253,146,158,179,97,109,29,238,246,204,16, - 68,112,136,157,53,109,87,15,3,200,225,9>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - <<139,58,59,201,53,11,160,69,50,244,82,198,7,170,36,213,157,224,58,54,162, - 131,139,30,161,124,39,70,70,226,243,213>>}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - <<140,102,178,169,55,154,72,235,237,246,174,23,188,43,114,195,171,233,203, - 219,247,130,73,57,128,105,103,50,97,1,195,113>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - <<218,31,129,51,81,87,77,55,61,179,235,87,157,45,159,228,185,29,239,194,50, - 224,8,39,238,90,163,139,86,196,193,210>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.2">>}, - <<74,252,89,220,173,247,27,231,237,200,185,52,179,159,85,78,199,179,30,43, - 27,26,71,103,56,58,102,63,134,149,140,227>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - <<15,124,250,155,219,35,254,215,33,236,5,65,155,206,226,178,194,26,119,233, - 38,188,224,222,218,2,155,90,220,113,111,226>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.1">>}, - <<133,128,81,127,114,25,171,182,235,26,100,132,19,211,194,49,151,164,153, - 232,238,12,184,91,99,120,17,14,55,59,18,213>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - <<77,136,166,207,49,69,174,71,48,206,151,157,195,38,52,182,223,150,54,59,81, - 222,161,94,32,206,80,184,22,1,35,229>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - <<32,148,247,67,145,142,28,56,34,176,168,194,101,235,122,232,17,137,54,221, - 78,15,4,198,43,185,189,243,103,109,206,77>>}, - {{versions,<<"hexpm">>,<<"parallel_stream">>}, - [<<"0.1.0">>,<<"0.1.1">>,<<"0.1.2">>,<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>, - <<"1.0.3">>,<<"1.0.4">>,<<"1.0.5">>,<<"1.0.6">>]}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.6">>}, - <<245,81,152,101,10,142,192,29,62,252,4,121,122,190,85,12,125,2,62,127,248, - 181,9,243,115,207,147,48,50,4,155,216>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"3.0.0">>}, - <<129,61,183,144,158,154,162,11,47,77,66,105,39,152,190,239,122,67,6,145, - 180,36,208,230,176,143,124,177,23,39,199,33>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - <<42,21,119,134,10,1,228,200,30,114,228,168,156,94,55,129,98,9,139,162,0,16, - 146,103,211,28,118,154,142,200,39,5>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<61,45,231,167,16,185,190,212,207,189,174,4,25,217,139,25,133,99,75,216, - 204,31,38,239,149,118,194,235,154,166,179,94>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<47,127,203,236,44,53,3,75,173,226,249,113,127,119,5,157,197,78,180,233,41, - 163,4,156,167,186,103,117,192,189,102,205>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{versions,<<"hexpm">>,<<"json">>}, - [<<"0.3.0">>,<<"0.3.2">>,<<"0.3.3">>,<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>, - <<"1.0.3">>,<<"1.0.4-SNAPSHOT">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>, - <<"1.2.2">>,<<"1.2.3">>,<<"1.2.4">>,<<"1.2.5">>,<<"1.3.0">>, - <<"2.0.0-SNAPSHOT">>,<<"2.0.1-SNAPSHOT">>,<<"2.1.0-SNAPSHOT">>]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<54,130,193,140,107,7,72,13,242,18,45,13,175,92,5,69,123,66,193,153,15,25, - 124,227,222,83,136,78,139,168,52,196>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<114,243,132,15,237,217,79,6,49,92,82,63,108,236,245,180,130,114,51,190, - 215,174,63,225,53,178,160,235,234,181,225,150>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - <<135,70,99,76,186,2,83,179,168,68,50,96,128,215,141,77,124,129,171,147,194, - 248,161,18,241,10,234,167,248,181,81,137>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.0">>}, - <<209,58,175,98,35,37,188,63,41,27,181,3,65,188,232,64,202,189,196,173,88, - 90,98,193,228,202,166,173,91,224,0,0>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.4.0">>}, - <<59,50,222,86,143,18,144,1,225,207,137,204,91,207,214,219,177,38,15,171, - 178,207,138,52,16,205,192,246,52,235,161,130>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>}, - <<63,208,188,230,213,18,226,108,43,136,22,146,172,159,239,246,137,34,85,58, - 6,102,165,218,96,119,83,232,103,228,27,155>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - <<189,7,50,202,74,249,220,189,146,187,33,246,250,40,136,15,241,188,169,205, - 77,7,75,194,228,0,198,145,168,209,85,118>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - <<14,251,252,49,4,90,210,247,90,72,103,59,209,190,250,138,106,88,85,233,59, - 140,49,23,174,215,215,218,141,230,91,113>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - <<207,150,227,40,255,93,105,131,141,216,156,33,169,219,34,113,107,252,198, - 239,119,46,157,157,221,247,186,98,33,2,114,45>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - <<194,86,85,6,198,33,238,1,14,113,208,95,85,94,57,161,185,55,224,8,16,226, - 132,188,133,70,58,77,78,252,75,0>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - <<20,151,21,176,8,250,42,138,93,102,63,203,224,145,118,224,55,223,64,46,3, - 70,180,142,177,159,86,181,159,41,141,202>>}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<99,155,46,135,73,225,27,135,185,235,66,242,173,50,93,22,28,23,11,57,178, - 136,172,141,4,196,243,31,143,8,35,235>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>}, - <<98,147,105,231,24,165,10,47,203,35,194,16,182,242,235,47,208,139,10,106, - 44,94,218,222,79,202,36,205,163,104,172,19>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.2">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>}, - <<166,14,116,40,77,58,146,60,222,101,192,10,57,221,69,66,253,125,167,194,46, - 131,133,192,55,138,212,25,197,75,46,8>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - <<104,186,213,50,136,223,34,192,154,2,173,163,162,246,198,21,61,38,39,241,0, - 221,207,182,197,73,6,12,12,124,201,100>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.0">>}, - <<128,143,97,68,230,177,7,27,6,94,239,120,144,128,132,98,39,236,140,208,209, - 97,22,203,135,221,149,155,216,18,239,43>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.0">>}, - <<243,49,124,145,83,170,55,127,166,185,89,20,120,129,153,155,144,207,208,46, - 107,182,94,252,109,247,132,70,161,188,207,204>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - <<103,45,142,148,54,71,27,125,91,119,202,91,227,173,105,208,101,85,62,126, - 216,197,219,41,187,61,102,35,120,16,70,24>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.1">>}, - <<220,200,6,171,3,123,85,189,17,164,219,175,110,1,254,197,16,225,235,171,41, - 172,182,83,128,244,240,195,34,240,205,70>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},[]}, - {last_update,{{2020,3,9},{10,43,10}}}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - <<170,251,187,150,81,165,231,101,13,123,159,25,62,98,2,0,128,177,162,75,154, - 124,185,199,45,17,191,57,238,255,23,42>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},[]}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.4.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - <<18,52,153,51,188,38,72,236,120,159,155,27,62,139,58,235,92,234,198,54,131, - 247,95,139,203,7,135,0,36,91,135,76>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - <<215,201,232,38,14,156,220,31,178,203,119,226,217,3,149,105,98,193,247,97, - 87,235,130,0,126,198,189,229,218,171,101,210>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - <<96,84,136,65,224,33,45,244,1,227,142,99,192,7,142,197,123,51,231,234,73, - 176,50,199,150,204,173,140,222,121,75,92>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>}, - <<170,252,202,255,79,141,45,31,52,224,172,76,175,193,98,54,166,88,204,228, - 48,180,138,64,56,197,131,141,70,72,161,3>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>}, - <<62,237,27,195,243,77,87,39,160,17,171,132,162,2,48,244,189,216,187,43,156, - 7,195,173,13,207,65,36,16,35,26,116>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.1">>}, - <<154,36,158,30,159,221,180,243,75,252,43,207,43,251,67,191,243,170,98,165, - 95,128,124,114,203,34,73,177,227,145,74,233>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>}, - <<4,158,11,31,133,208,132,227,248,103,8,40,185,233,250,95,12,139,166,97,1, - 206,158,190,112,254,84,247,65,148,11,179>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - <<125,82,45,99,193,63,55,10,240,85,62,39,241,17,175,46,151,249,79,82,241, - 156,152,189,85,126,220,205,83,211,23,237>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.5">>,false}]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - <<71,184,128,141,153,7,132,52,53,26,145,255,10,183,239,226,166,131,80,36, - 207,53,156,206,25,80,127,16,58,100,69,117>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - <<97,30,5,50,254,221,69,36,250,157,80,45,165,247,59,154,203,174,132,156,144, - 9,236,40,125,217,158,208,156,33,90,65>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - <<157,73,129,3,242,145,156,200,208,187,143,59,95,44,211,110,52,23,4,176,180, - 198,37,162,255,245,156,162,15,247,71,41>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - <<89,208,170,245,32,158,59,80,103,69,138,80,59,168,11,115,136,213,101,180, - 134,161,131,77,199,158,216,113,202,46,175,195>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - <<174,118,224,106,125,26,72,9,28,95,84,35,200,94,240,134,206,108,19,85,140, - 94,14,149,211,176,78,31,86,195,90,134>>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.14">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.6">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.1">>}, - <<6,226,97,227,131,224,52,157,213,38,1,41,250,163,1,194,149,246,193,17,186, - 67,197,125,164,250,148,154,32,14,198,10>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.2">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - <<203,247,114,93,87,123,181,54,15,26,132,29,231,129,200,59,140,131,56,79, - 158,10,194,88,127,8,19,128,121,36,154,200>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - <<64,95,116,217,92,226,6,190,163,171,188,216,241,63,34,144,224,191,223,138, - 75,210,50,253,14,103,194,242,36,158,40,119>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - <<253,149,195,248,33,112,38,177,155,78,193,134,22,8,84,223,29,230,41,51,192, - 33,56,76,84,98,69,66,3,239,206,224>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.1.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>}, - <<18,120,164,87,222,184,217,145,53,195,120,183,31,102,242,30,40,61,138,222, - 164,38,37,42,63,143,94,0,60,83,106,123>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<236,36,134,141,134,25,117,122,104,240,121,131,87,199,25,8,7,161,207,196, - 44,233,12,24,194,55,96,229,146,73,162,26>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.1">>}, - <<129,36,138,54,209,182,2,177,126,166,85,107,250,137,82,73,32,145,240,26, - 240,81,115,222,17,248,178,151,226,187,240,136>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},{{2020,3,9},{14,52,0}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - <<38,30,64,121,8,118,140,103,246,243,173,85,119,190,179,66,64,69,24,207,58, - 141,28,37,249,112,76,8,167,126,137,109>>}, - {{registry_etag,<<"hexpm">>,<<"recon">>}, - <<"\"7e2ca92025513cd89d7aafccb513b5fe\"">>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - <<110,147,67,127,116,169,151,8,6,138,50,183,103,176,36,50,209,19,137,98,117, - 66,20,9,227,1,141,152,146,54,166,90>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - <<72,227,29,177,140,35,191,51,200,56,93,63,114,178,112,129,75,142,94,101,7, - 17,152,154,152,201,40,95,125,184,34,154>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"csv">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - <<206,105,157,49,102,44,52,218,135,131,255,23,171,152,12,99,80,186,80,189, - 130,71,85,105,219,224,255,146,149,83,217,202>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.0">>}, - <<100,138,6,120,148,118,36,173,36,113,234,134,221,36,183,85,146,46,13,252, - 198,141,103,234,183,3,39,143,217,90,195,253>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},{{2020,3,9},{14,52,0}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>}, - <<132,214,193,90,236,232,30,206,109,107,142,183,225,14,174,108,7,224,0,27, - 148,211,234,62,159,16,168,136,82,238,143,85>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - <<158,233,172,54,50,92,173,255,53,126,95,219,121,194,116,101,7,77,182,127, - 154,240,15,64,126,21,191,100,146,57,149,10>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>},{{2020,3,9},{14,52,5}}}]. +[{read_concurrency,false},{write_concurrency,false},{compressed,false},{heir,none},{name,'Elixir.Hex.Registry.Server'},{named_table,false},{type,set},{keypos,1},{protection,protected}]. +[{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},[]},{{registry_etag,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},<<34,98,53,51,54,98,98,50,97,98,99,55,57,57,51,99,54,57,97,48,55,101,56,53,55,48,101,56,52,101,49,49,51,34>>},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},<<164,193,167,195,13,33,81,182,228,151,108,178,245,44,10,29,73,236,150,90,251,115,126,216,74,104,75,196,40,77,22,39>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},<<255,66,34,18,179,195,245,216,105,141,174,159,245,174,90,98,169,63,129,206,76,236,147,76,248,14,196,63,254,173,29,161>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<156,225,30,255,90,116,160,123,175,55,135,178,177,157,215,152,114,77,41,169,195,164,146,164,29,243,159,106,246,134,218,14>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},<<110,216,76,213,101,167,236,112,146,0,220,53,152,58,23,181,31,118,152,56,180,196,142,200,193,64,28,253,16,50,224,254>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},<<113,54,204,115,154,206,41,95,199,76,55,143,51,105,158,81,69,190,173,79,220,27,71,153,130,45,2,135,72,145,54,251>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},<<152,228,237,44,134,182,51,223,155,1,144,214,179,191,56,188,46,56,91,166,32,15,104,32,31,181,117,211,153,9,129,108>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},<<59,151,167,246,49,247,35,53,197,202,105,173,82,159,74,171,245,78,9,177,14,190,12,114,5,182,175,122,13,146,27,148>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,51,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<236,36,134,141,134,25,117,122,104,240,121,131,87,199,25,8,7,161,207,196,44,233,12,24,194,55,96,229,146,73,162,26>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},<<9,34,102,42,94,22,87,147,197,30,24,201,196,184,166,184,228,130,97,241,131,192,210,137,82,91,53,245,135,195,225,84>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},<<240,71,105,128,125,55,3,221,199,75,125,172,252,7,168,137,217,240,195,33,243,208,145,182,109,158,2,193,87,193,164,125>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},<<253,149,195,248,33,112,38,177,155,78,193,134,22,8,84,223,29,230,41,51,192,33,56,76,84,98,69,66,3,239,206,224>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},<<189,191,147,143,9,109,63,57,160,105,59,91,253,243,226,107,192,112,4,217,179,55,248,204,180,36,64,115,180,82,185,227>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},<<121,217,236,185,73,178,123,204,43,90,3,121,139,93,113,250,129,148,13,153,252,240,217,106,194,6,142,94,242,154,218,192>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},<<251,60,197,214,171,222,88,2,7,87,132,147,178,216,96,62,100,143,44,93,168,223,234,187,26,186,196,121,147,150,228,33>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},<<228,42,101,145,72,233,247,177,231,215,28,123,93,36,153,124,215,189,123,114,215,227,30,165,194,219,22,116,184,238,231,136>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},<<58,213,138,231,135,233,199,201,77,215,206,218,59,88,126,194,198,70,4,86,62,4,155,42,14,139,170,250,232,50,173,219>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,49,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},<<17,125,88,18,60,172,60,104,2,0,82,72,191,3,237,32,165,177,77,221,30,57,216,108,122,229,40,150,2,53,82,144>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},<<169,112,194,61,151,0,174,120,66,181,38,197,118,119,230,227,241,8,148,180,41,82,70,150,234,213,71,233,48,35,145,192>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},<<188,183,85,161,111,172,145,202,215,155,254,159,195,88,91,176,123,147,49,229,12,254,52,32,162,75,204,45,115,87,9,174>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},<<79,120,74,86,127,41,153,226,141,54,193,51,86,73,95,69,95,173,79,184,140,102,169,194,219,96,171,43,96,209,20,121>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},<<221,82,137,92,76,143,33,54,94,138,69,110,63,63,180,18,123,84,143,1,54,24,160,87,216,253,118,164,42,200,244,239>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},<<105,239,141,192,74,76,174,199,209,37,41,162,55,199,180,155,139,177,255,48,198,228,44,186,234,71,245,179,206,145,253,189>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},<<71,99,182,154,138,119,189,119,210,111,71,125,25,100,40,183,65,38,26,118,18,87,255,28,249,39,83,160,212,210,74,99>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},<<165,235,69,46,242,66,123,154,112,20,171,100,152,141,178,66,81,134,95,142,111,174,125,163,240,100,177,227,178,61,51,219>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},<<54,23,39,196,84,172,47,207,55,141,38,16,79,102,79,157,134,244,254,184,32,110,4,45,190,24,116,214,109,132,163,224>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},<<76,120,211,230,117,249,239,248,133,203,226,82,200,154,143,193,210,251,128,60,13,3,169,20,40,30,88,120,52,224,148,49>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},<<212,204,201,230,181,103,60,98,187,149,202,83,251,122,126,231,244,244,217,75,159,14,143,136,177,239,8,191,215,210,33,61>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},<<28,124,91,212,145,116,144,180,221,64,56,135,104,117,230,153,77,150,87,211,161,134,95,252,236,98,167,183,59,95,216,9>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,56,46,48>>,false}]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},<<61,98,119,99,233,68,81,236,33,113,230,208,52,205,163,1,55,45,225,205,240,11,189,224,214,126,14,174,103,116,102,219>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},<<75,20,25,238,44,60,158,230,138,146,199,152,64,3,5,112,242,108,133,120,192,247,226,66,82,255,85,185,75,237,82,22>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},<<170,203,72,169,240,220,55,111,21,223,48,101,202,33,132,115,141,215,201,81,80,174,216,60,40,206,11,171,181,110,91,152>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},<<241,44,133,153,45,45,129,212,251,122,96,34,90,55,175,239,58,240,6,152,35,204,50,26,37,233,223,157,59,203,110,210>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},<<120,45,32,1,18,21,106,160,173,174,245,209,65,156,42,204,229,182,91,99,69,210,69,48,241,27,87,153,24,77,152,231>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},<<44,214,114,64,165,78,156,210,97,107,200,60,12,53,45,71,248,123,204,210,236,89,158,206,237,192,11,203,233,6,63,7>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},<<243,49,124,145,83,170,55,127,166,185,89,20,120,129,153,155,144,207,208,46,107,182,94,252,109,247,132,70,161,188,207,204>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},<<252,245,217,166,247,209,141,138,92,106,52,103,215,189,249,253,215,44,167,105,222,97,216,91,58,2,5,112,196,74,63,240>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},[]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},<<158,101,146,10,32,96,187,77,208,152,73,19,65,107,108,14,183,75,77,107,232,175,32,45,37,244,137,191,158,60,8,166>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,52>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,54>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},<<87,63,110,101,253,118,8,187,24,230,175,36,91,213,105,165,181,56,126,4,204,76,7,123,31,218,233,153,8,74,169,85>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},<<181,87,39,178,6,218,185,111,235,2,82,103,229,193,34,221,180,72,245,91,102,72,249,21,107,141,72,18,21,216,2,144>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},<<76,104,194,190,145,0,21,20,239,142,210,98,97,234,3,141,71,153,18,133,124,86,82,133,2,177,233,13,195,130,236,139>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},<<78,149,60,214,171,60,247,71,60,37,144,249,155,72,255,149,21,190,25,113,189,191,237,213,92,218,18,14,251,45,35,205>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},<<25,16,86,131,36,155,248,172,214,240,77,236,61,14,246,80,210,82,104,170,92,177,100,233,182,61,109,139,152,177,70,187>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},<<81,54,235,143,128,32,164,64,245,248,148,241,193,30,127,169,72,3,21,178,230,227,152,176,228,102,9,203,150,62,118,138>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},<<9,86,102,121,241,147,49,21,246,24,158,108,78,32,94,53,170,234,28,174,220,248,67,135,92,62,182,94,236,131,228,136>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},<<108,84,138,208,244,145,100,149,167,137,119,103,74,37,24,71,134,159,133,181,18,91,124,42,68,218,49,120,149,90,223,209>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},<<14,193,72,255,99,89,118,57,179,255,140,195,239,82,60,251,70,105,244,250,26,46,146,30,5,132,156,143,149,12,124,109>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<101,97,114,109,97,114,107>>,<<101,97,114,109,97,114,107>>,<<62,61,32,48,46,48,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,51,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,54>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},<<222,149,85,197,24,59,28,187,92,189,218,199,35,160,58,204,223,104,105,205,147,48,244,80,100,221,68,17,238,6,11,161>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},<<170,251,187,150,81,165,231,101,13,123,159,25,62,98,2,0,128,177,162,75,154,124,185,199,45,17,191,57,238,255,23,42>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,52,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},<<208,31,56,94,20,110,182,218,61,93,90,7,40,44,144,82,47,110,7,231,100,195,38,27,230,155,172,172,159,182,64,41>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},<<80,24,35,9,68,201,101,196,109,80,116,126,15,148,188,24,34,15,177,124,65,58,146,14,145,238,25,134,200,164,239,91>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},<<164,124,235,26,172,111,178,141,112,119,136,220,212,90,122,233,169,153,62,122,65,64,97,190,190,192,129,132,225,94,55,121>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},<<40,31,44,187,67,159,227,192,67,119,62,230,200,49,114,171,216,3,38,220,198,21,63,100,48,228,212,230,177,77,126,157>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},<<72,67,100,98,6,104,157,95,209,160,235,61,14,8,188,194,70,39,52,17,101,196,9,111,104,119,219,243,240,116,38,190>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},<<254,147,80,109,5,37,42,216,45,114,37,127,101,73,170,177,22,100,8,138,19,7,242,111,10,177,172,177,114,184,195,91>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},<<251,215,141,211,229,171,186,220,23,221,216,153,5,0,47,109,32,160,48,70,247,85,90,96,152,210,138,159,20,254,175,88>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},<<172,88,31,32,233,197,199,224,203,127,65,143,86,7,39,141,113,97,28,101,221,242,233,48,101,241,244,206,17,221,84,24>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},nil},{{tarball_etag,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<34,100,51,53,52,99,57,102,99,98,102,100,53,52,53,53,54,98,56,101,56,101,101,102,54,99,48,53,56,97,49,53,50,34>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},<<23,12,23,28,231,246,221,112,200,88,6,81,84,163,48,91,133,100,131,60,109,204,161,126,16,182,118,202,49,234,151,111>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},<<242,244,244,96,98,58,111,21,70,131,171,174,52,53,37,37,225,217,24,56,2,103,205,189,148,154,7,186,87,80,50,72>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},<<14,251,252,49,4,90,210,247,90,72,103,59,209,190,250,138,106,88,85,233,59,140,49,23,174,215,215,218,141,230,91,113>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},<<80,233,140,137,253,228,76,91,121,125,96,45,137,62,163,15,126,225,180,91,77,1,174,170,62,167,66,214,185,139,30,238>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},<<172,251,194,45,45,206,209,25,136,180,61,243,69,68,241,184,117,230,1,196,19,143,180,148,98,227,234,158,87,172,94,155>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},<<186,119,162,144,135,118,51,176,15,182,15,212,137,226,228,140,9,196,152,138,4,227,160,2,68,188,251,111,6,157,247,36>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},<<211,69,204,226,233,242,86,144,250,158,83,33,6,112,113,98,221,93,141,153,138,197,64,226,68,231,158,219,138,143,60,44>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},<<21,65,73,21,16,131,0,130,100,90,163,191,158,38,141,151,254,169,191,217,126,7,137,84,112,244,23,246,108,243,192,116>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},[]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},<<126,106,131,77,27,49,48,195,34,70,205,62,157,56,3,252,52,28,167,175,148,54,47,51,33,56,139,197,165,119,161,26>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},<<81,222,127,212,160,25,247,150,107,51,19,62,173,183,197,186,145,158,93,130,159,185,169,5,79,1,43,225,62,143,157,1>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},<<98,94,189,100,211,58,226,230,82,1,194,193,77,108,133,194,124,200,182,143,45,13,211,120,40,253,233,198,146,13,209,49>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},<<33,156,184,97,3,253,149,117,90,224,88,186,192,215,182,206,78,182,125,143,226,108,75,46,148,126,124,62,166,8,74,14>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},<<120,201,76,85,220,135,233,31,246,237,228,245,244,103,37,10,222,151,49,232,233,82,110,222,32,154,82,16,238,82,134,146>>},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},<<28,55,228,101,104,121,52,189,79,135,20,25,68,145,107,252,74,110,96,231,95,211,42,107,78,234,230,154,136,205,203,158>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},<<225,176,196,235,165,145,73,137,247,161,169,173,159,137,147,207,116,118,14,70,72,134,240,253,34,10,98,51,126,52,121,20>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<61,45,231,167,16,185,190,212,207,189,174,4,25,217,139,25,133,99,75,216,204,31,38,239,149,118,194,235,154,166,179,94>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},<<154,36,158,30,159,221,180,243,75,252,43,207,43,251,67,191,243,170,98,165,95,128,124,114,203,34,73,177,227,145,74,233>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},<<43,187,237,224,72,117,138,214,127,122,117,84,47,144,246,148,202,128,50,50,162,182,127,221,127,159,218,152,141,186,154,137>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},<<139,58,59,201,53,11,160,69,50,244,82,198,7,170,36,213,157,224,58,54,162,131,139,30,161,124,39,70,70,226,243,213>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},<<16,58,136,179,90,253,98,119,4,200,46,74,189,12,206,172,147,54,164,224,65,214,227,196,113,15,233,60,72,73,65,147>>},{{versions,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},[<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52>>,<<49,46,48,46,53>>,<<49,46,48,46,55>>,<<49,46,48,46,56>>,<<49,46,48,46,57>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,51,46,51>>,<<49,46,51,46,52>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<49,46,52,46,53>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>,<<49,46,53,46,51>>]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},<<213,76,4,154,169,73,135,48,92,115,232,78,66,2,91,38,231,216,196,73,125,253,121,224,196,135,233,238,94,170,246,110>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},<<142,227,116,69,141,59,139,35,236,153,58,203,155,86,56,14,206,241,51,59,106,235,87,206,25,68,246,182,43,108,69,44>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{registry_etag,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},<<34,98,101,99,102,50,52,49,99,55,102,101,99,54,55,51,98,98,54,98,55,54,56,99,56,55,52,57,102,53,52,57,98,34>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},<<200,135,134,160,114,7,168,11,7,30,163,142,26,113,168,171,215,50,62,203,247,5,102,1,39,0,155,32,56,197,161,209>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},<<67,61,148,107,14,71,85,225,134,254,86,69,104,234,212,245,147,176,209,83,55,252,255,169,94,215,213,184,166,97,38,112>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},<<35,233,217,97,4,204,233,231,74,99,53,111,40,10,215,199,171,200,238,104,164,95,176,81,208,132,82,54,188,148,56,108>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},<<24,229,217,170,84,18,236,6,60,249,113,155,207,231,59,249,144,197,254,213,201,163,200,66,44,43,93,149,41,252,139,13>>},{{versions,<<104,101,120,112,109>>,<<106,115,111,110>>},[<<48,46,51,46,48>>,<<48,46,51,46,50>>,<<48,46,51,46,51>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,50,46,53>>,<<49,46,51,46,48>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},<<132,214,193,90,236,232,30,206,109,107,142,183,225,14,174,108,7,224,0,27,148,211,234,62,159,16,168,136,82,238,143,85>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},<<174,118,224,106,125,26,72,9,28,95,84,35,200,94,240,134,206,108,19,85,140,94,14,149,211,176,78,31,86,195,90,134>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},<<189,14,10,17,147,53,136,155,170,147,205,6,251,153,1,163,63,243,132,204,247,131,245,35,135,32,122,194,183,161,148,56>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},<<7,70,231,172,135,119,124,3,107,104,136,211,75,235,196,163,110,83,65,104,59,87,163,225,184,103,14,93,9,182,129,82>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},<<198,111,234,137,186,120,98,185,73,1,186,240,135,18,133,233,183,60,173,137,197,253,181,122,99,134,210,173,207,41,89,62>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},<<120,238,232,187,56,240,190,226,231,54,115,215,27,199,95,198,251,1,245,111,13,35,231,105,162,110,238,54,85,72,122,56>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},{{2020,5,25},{14,32,6}}},{{registry_etag,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},<<34,102,56,48,48,54,101,53,100,53,97,55,56,98,48,56,97,51,56,100,98,49,52,50,57,57,49,55,55,55,57,97,57,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},<<176,61,237,234,103,169,146,35,162,234,249,241,38,76,227,113,84,86,77,232,153,253,61,139,154,33,177,166,253,100,175,231>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},<<45,62,40,47,114,196,225,164,195,164,63,97,249,39,178,20,202,237,38,172,118,27,96,90,20,228,10,132,97,38,13,166>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},<<130,163,223,22,68,204,169,183,106,75,126,192,23,189,164,63,18,214,96,37,232,245,60,212,77,210,176,19,164,69,251,147>>},{{versions,<<104,101,120,112,109>>,<<106,115,111,110,101>>},[<<49,46,48,46,48>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,50,46,53>>,<<49,46,50,46,54>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<49,46,52,46,53>>,<<49,46,52,46,54>>,<<49,46,52,46,55>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},<<19,84,186,128,5,249,121,193,119,86,31,224,139,131,202,251,174,67,243,4,110,138,108,242,9,19,43,137,103,182,219,23>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},<<0,214,237,215,48,254,153,35,132,121,150,70,157,1,139,250,210,149,54,105,189,43,99,91,7,84,206,45,213,159,166,37>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},<<227,235,78,191,17,38,38,39,240,183,155,79,209,224,120,250,78,194,190,249,12,248,59,124,125,33,79,110,230,167,191,174>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<212,46,32,5,65,22,196,157,82,66,211,255,158,25,19,172,204,235,230,1,95,68,157,110,49,42,91,193,96,231,154,98>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},<<233,250,128,26,6,80,103,232,165,96,68,74,199,144,121,115,174,138,214,151,226,6,200,187,26,66,45,159,37,206,202,197>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},<<85,88,160,32,2,252,151,72,122,83,69,38,81,20,195,160,164,127,14,44,248,65,131,174,100,131,18,12,40,181,169,45>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},<<59,50,222,86,143,18,144,1,225,207,137,204,91,207,214,219,177,38,15,171,178,207,138,52,16,205,192,246,52,235,161,130>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},nil},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},{{2020,5,25},{14,32,1}}},{{registry_etag,<<104,101,120,112,109>>,<<114,101,99,111,110>>},<<34,55,101,50,99,97,57,50,48,50,53,53,49,51,99,100,56,57,100,55,97,97,102,99,99,98,53,49,51,98,53,102,101,34>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},<<56,183,89,231,65,206,79,134,87,102,151,38,186,237,121,114,96,39,96,147,19,252,40,47,90,103,30,25,132,140,33,53>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},<<110,147,67,127,116,169,151,8,6,138,50,183,103,176,36,50,209,19,137,98,117,66,20,9,227,1,141,152,146,54,166,90>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},<<245,81,152,101,10,142,192,29,62,252,4,121,122,190,85,12,125,2,62,127,248,181,9,243,115,207,147,48,50,4,155,216>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},<<55,62,180,247,50,31,137,138,214,119,41,153,243,13,175,101,249,243,142,29,61,212,215,152,215,168,45,59,18,63,225,211>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},<<93,43,197,39,177,127,29,127,117,31,104,29,56,234,57,136,166,142,206,162,41,215,41,123,71,219,82,241,176,26,149,42>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},<<42,21,119,134,10,1,228,200,30,114,228,168,156,94,55,129,98,9,139,162,0,16,146,103,211,28,118,154,142,200,39,5>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{tarball_etag,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<34,101,48,57,54,101,57,49,48,55,97,102,50,98,57,48,48,54,50,54,102,98,57,54,49,48,54,57,51,55,50,50,101,34>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},<<10,118,11,81,162,17,78,11,198,237,70,204,202,205,37,92,250,29,159,66,54,195,156,177,113,62,201,78,95,174,197,22>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},<<8,57,84,123,158,93,199,206,138,139,153,28,158,125,154,234,48,58,197,223,224,74,57,54,130,230,113,175,14,4,182,228>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},<<158,233,172,54,50,92,173,255,53,126,95,219,121,194,116,101,7,77,182,127,154,240,15,64,126,21,191,100,146,57,149,10>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},<<215,39,177,232,193,56,141,13,63,26,138,145,247,217,17,174,245,221,100,108,150,7,67,88,21,165,137,133,130,165,50,15>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},<<203,247,114,93,87,123,181,54,15,26,132,29,231,129,200,59,140,131,56,79,158,10,194,88,127,8,19,128,121,36,154,200>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},<<144,31,247,139,57,199,84,251,77,111,215,45,207,13,189,57,137,103,187,210,228,213,156,8,212,215,170,68,167,61,233,29>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},<<129,61,183,144,158,154,162,11,47,77,66,105,39,152,190,239,122,67,6,145,180,36,208,230,176,143,124,177,23,39,199,33>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},<<159,1,192,129,120,215,122,101,122,54,82,135,8,70,212,202,238,122,123,113,202,50,151,29,247,206,87,192,121,218,111,222>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},[]},{{tarball_etag,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<34,101,102,98,55,57,99,97,48,99,101,49,49,97,51,99,99,52,55,51,52,48,102,48,57,100,49,50,52,102,53,53,53,34>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},[]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},{{2020,5,25},{14,32,1}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},<<185,80,65,252,17,144,118,152,187,77,64,117,190,80,75,6,0,168,234,119,129,196,236,127,27,240,142,115,235,238,108,37>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},<<103,45,142,148,54,71,27,125,91,119,202,91,227,173,105,208,101,85,62,126,216,197,219,41,187,61,102,35,120,16,70,24>>},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},<<165,51,161,218,40,55,86,236,147,215,126,152,4,45,49,181,239,211,135,95,108,92,60,238,204,108,216,45,65,12,228,128>>},{version,3},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},<<102,254,225,234,245,54,52,125,73,57,66,203,94,8,83,33,197,30,128,222,18,79,240,15,75,38,81,135,11,145,155,153>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},<<220,199,223,5,177,219,110,77,26,62,164,3,245,148,210,223,129,195,79,185,24,146,201,196,194,204,109,44,245,156,34,154>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},<<18,134,167,155,171,47,24,153,34,1,52,218,249,166,149,88,106,240,14,167,25,104,230,205,137,211,211,175,223,124,236,186>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},<<65,109,94,153,196,194,139,118,254,70,45,153,185,188,212,77,72,28,207,75,64,118,138,103,220,169,212,16,127,162,167,173>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},<<144,235,14,1,159,220,17,222,131,168,140,108,26,139,190,153,105,68,81,76,246,187,206,222,7,44,143,34,45,28,113,35>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},<<155,164,209,166,168,242,208,178,113,109,226,178,165,204,43,170,204,126,246,97,224,35,89,184,212,159,28,14,122,140,94,203>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},<<100,128,181,191,88,169,36,0,19,228,144,60,75,75,247,96,128,68,39,162,206,78,78,248,86,100,248,242,7,75,45,130>>},{{versions,<<104,101,120,112,109>>,<<116,105,110,121>>},[<<49,46,48,46,48>>,<<49,46,48,46,49>>]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},<<34,47,127,11,94,117,136,177,233,233,183,62,72,148,15,18,212,59,190,8,196,116,176,143,213,126,249,135,71,209,197,102>>},{{versions,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,50,46,49>>,<<48,46,50,46,50>>,<<48,46,50,46,51>>]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},<<100,77,109,87,190,251,34,200,225,155,50,77,238,25,215,59,28,0,69,101,0,152,97,168,246,76,104,183,185,230,77,191>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},<<4,158,11,31,133,208,132,227,248,103,8,40,185,233,250,95,12,139,166,97,1,206,158,190,112,254,84,247,65,148,11,179>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},<<19,59,231,97,129,14,192,233,78,5,212,21,105,68,255,195,93,2,214,168,143,168,253,252,42,242,155,165,62,173,179,119>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},<<44,187,218,100,149,12,13,159,201,60,175,106,184,221,155,49,232,55,50,164,156,21,248,17,153,78,214,142,229,155,45,213>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},<<196,149,38,14,55,137,176,144,88,147,32,164,221,109,151,69,54,147,217,186,43,222,120,167,11,98,32,205,246,88,203,255>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},<<37,105,199,33,33,80,209,87,165,122,53,119,190,202,207,162,227,70,163,175,234,105,135,8,133,22,134,172,220,210,141,4>>},{{versions,<<104,101,120,112,109>>,<<99,115,118>>},[<<48,46,49,46,48>>,<<48,46,49,46,49>>,<<48,46,50,46,48>>,<<48,46,50,46,49>>,<<48,46,50,46,50>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,49,46,50>>,<<49,46,49,46,51>>,<<49,46,49,46,52>>,<<49,46,49,46,53>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,51,46,51>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<50,46,48,46,48,45,114,99,46,48>>,<<50,46,48,46,48>>,<<50,46,49,46,48>>,<<50,46,49,46,49>>,<<50,46,50,46,48>>,<<50,46,51,46,48>>,<<50,46,51,46,49>>]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},<<61,90,253,0,39,181,86,155,45,27,246,54,221,215,222,213,246,123,10,207,61,96,155,88,64,165,71,198,10,30,157,63>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},<<4,169,229,159,101,162,157,117,225,224,34,182,226,186,4,222,45,15,34,138,192,11,179,255,223,212,21,128,10,36,196,109>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},<<98,147,105,231,24,165,10,47,203,35,194,16,182,242,235,47,208,139,10,106,44,94,218,222,79,202,36,205,163,104,172,19>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},<<124,244,152,104,247,49,234,243,108,241,245,95,175,212,116,192,199,114,218,187,214,90,139,9,202,35,89,24,160,252,11,246>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},<<50,25,48,170,147,181,145,180,139,214,172,185,202,47,23,172,134,195,217,48,91,100,215,40,142,33,246,124,247,186,51,129>>},{{registry_etag,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},<<34,55,57,56,102,51,53,100,102,97,101,99,102,102,50,50,100,52,48,53,99,99,55,53,99,53,53,49,101,51,98,54,101,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},<<0,205,217,118,142,181,178,146,99,138,149,170,87,141,218,217,84,199,175,233,128,141,85,146,244,187,66,220,249,187,175,239>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},<<180,6,194,252,205,234,160,217,78,35,181,227,10,227,214,53,162,212,97,227,99,165,201,198,49,104,151,3,124,240,80,210>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},nil},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<62,61,32,48,46,57,57,46,48,32,97,110,100,32,60,32,50,46,48,46,48>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,49,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},<<77,136,166,207,49,69,174,71,48,206,151,157,195,38,52,182,223,150,54,59,81,222,161,94,32,206,80,184,22,1,35,229>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},<<109,95,128,33,54,36,158,100,249,212,153,112,67,177,51,85,198,234,195,20,33,125,195,177,155,243,103,126,53,26,6,65>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},<<237,244,27,181,79,195,77,80,10,31,149,28,153,82,162,59,134,174,136,12,189,252,117,59,72,225,183,14,63,184,238,19>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},<<209,152,101,72,132,113,137,181,31,30,251,101,209,150,230,171,159,46,136,166,135,138,54,58,236,14,60,119,226,85,6,22>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<114,243,132,15,237,217,79,6,49,92,82,63,108,236,245,180,130,114,51,190,215,174,63,225,53,178,160,235,234,181,225,150>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},<<166,14,116,40,77,58,146,60,222,101,192,10,57,221,69,66,253,125,167,194,46,131,133,192,55,138,212,25,197,75,46,8>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},<<62,26,107,110,184,70,116,187,13,10,189,144,160,61,7,208,27,242,46,141,86,147,149,102,74,41,138,252,89,164,234,49>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},<<72,36,218,219,1,225,67,149,246,94,157,24,218,41,77,83,67,38,215,238,215,121,150,243,194,47,116,169,135,1,121,235>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},<<232,37,108,31,91,115,43,205,72,90,169,75,192,19,113,243,36,225,20,154,143,38,38,35,64,124,162,204,19,171,8,74>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},<<15,124,250,155,219,35,254,215,33,236,5,65,155,206,226,178,194,26,119,233,38,188,224,222,218,2,155,90,220,113,111,226>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},[]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},<<186,136,54,254,234,75,57,75,183,24,161,97,252,89,162,136,254,1,9,181,0,109,107,223,151,182,186,223,207,111,15,37>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},<<253,248,67,188,168,88,32,58,225,222,22,218,46,226,6,245,52,22,187,218,93,200,201,231,143,67,36,61,228,188,58,254>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},{{2020,5,25},{14,32,1}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},<<243,239,123,26,226,138,85,229,59,140,181,193,29,14,11,100,231,110,56,213,243,232,48,191,46,59,242,204,10,137,216,72>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},<<217,235,99,102,16,224,150,248,111,37,217,164,111,53,169,250,202,195,86,9,167,89,27,59,227,50,110,153,160,72,70,101>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},<<226,111,246,64,124,87,46,227,117,253,144,19,151,219,230,226,40,138,182,110,71,245,89,90,225,173,188,186,123,187,147,88>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},<<109,44,115,99,187,137,175,235,209,36,27,0,51,60,161,178,176,156,97,30,253,148,104,172,0,236,207,120,210,64,58,4>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},<<210,233,151,147,38,189,170,207,80,171,14,82,200,15,83,215,76,222,217,61,26,226,31,171,207,102,52,98,56,204,3,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},<<122,12,59,31,191,255,219,234,254,33,139,68,53,153,79,38,248,249,130,170,186,128,63,164,215,3,211,138,183,43,43,116>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,51,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},<<245,5,175,141,207,193,255,0,92,117,109,254,27,39,65,9,23,223,171,168,134,128,134,39,11,216,165,8,205,67,113,193>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},<<207,101,129,50,228,228,150,173,232,111,35,114,94,237,64,16,52,240,120,216,88,212,173,10,147,76,123,58,58,204,20,178>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},<<245,131,33,140,237,130,38,117,228,132,100,143,162,108,147,61,98,19,115,240,28,108,118,189,0,0,93,123,212,184,46,39>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},<<156,36,97,56,134,110,216,22,150,116,239,84,148,232,205,120,44,210,38,130,113,83,121,236,189,172,19,247,170,149,212,231>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},<<146,48,109,88,81,27,235,226,12,242,50,205,65,94,151,159,216,143,175,226,159,194,63,30,158,27,67,127,162,208,6,180>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},<<129,36,138,54,209,182,2,177,126,166,85,107,250,137,82,73,32,145,240,26,240,81,115,222,17,248,178,151,226,187,240,136>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},<<163,31,253,175,119,73,79,241,45,108,44,156,176,50,53,212,55,53,150,210,250,246,46,229,185,156,26,228,121,97,132,0>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},<<167,118,4,141,83,165,143,243,181,212,72,231,82,105,45,47,47,255,248,233,98,241,72,127,19,182,62,184,86,155,14,126>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},<<205,90,251,157,183,240,209,148,135,87,47,162,129,133,182,212,222,100,127,20,35,87,70,130,78,119,179,19,155,121,183,37>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},<<18,120,55,62,72,14,61,187,172,80,45,35,75,247,111,77,173,185,164,174,22,208,182,58,172,75,199,249,79,211,178,228>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,50>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,53>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},<<130,13,172,184,217,233,253,211,206,164,132,51,239,127,49,178,246,251,249,233,63,255,40,220,35,138,5,190,195,76,57,87>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},<<6,79,119,21,219,121,136,118,175,30,184,40,124,132,98,109,32,87,82,237,176,225,163,143,209,38,34,47,103,105,237,172>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},<<139,0,144,177,58,66,52,58,215,9,237,8,129,17,253,64,169,228,194,209,129,158,246,193,230,1,52,113,52,237,52,208>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},<<128,143,97,68,230,177,7,27,6,94,239,120,144,128,132,98,39,236,140,208,209,97,22,203,135,221,149,155,216,18,239,43>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},<<220,200,6,171,3,123,85,189,17,164,219,175,110,1,254,197,16,225,235,171,41,172,182,83,128,244,240,195,34,240,205,70>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},nil},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},<<99,150,69,207,172,50,94,52,147,129,103,178,114,186,224,121,31,234,58,52,207,50,194,149,37,171,241,211,35,237,76,24>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},<<71,184,128,141,153,7,132,52,53,26,145,255,10,183,239,226,166,131,80,36,207,53,156,206,25,80,127,16,58,100,69,117>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},<<84,125,88,219,189,134,76,10,86,12,12,163,120,158,232,132,137,116,232,197,23,205,183,130,124,51,3,227,180,46,117,77>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},<<144,237,193,93,248,153,119,172,98,173,124,194,8,202,22,226,66,122,169,193,130,137,238,155,243,134,208,96,117,166,219,140>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},<<78,125,235,70,12,170,104,171,2,130,210,4,228,58,85,50,98,180,93,64,169,61,208,16,154,133,137,103,171,28,143,191>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},<<123,233,243,178,104,142,253,204,104,144,98,204,210,30,52,14,229,253,62,249,220,209,66,19,96,52,190,181,237,28,46,35>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},<<7,202,4,16,92,47,46,71,50,244,235,97,134,62,24,231,241,183,181,11,109,30,227,30,126,23,205,198,18,154,77,225>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},<<114,39,232,58,184,30,71,83,97,1,37,210,81,187,247,140,153,22,127,190,127,147,26,140,191,188,62,218,133,38,37,156>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},[]},{{versions,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,51,46,48>>,<<48,46,51,46,49>>,<<48,46,52,46,48>>,<<48,46,53,46,48>>,<<48,46,54,46,48>>,<<49,46,48,46,48>>]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},<<204,30,48,54,44,84,234,91,230,196,12,140,160,37,46,105,227,103,226,22,134,157,107,154,241,123,89,58,246,167,104,36>>},{{repo,<<104,101,120,112,109>>},<<104,116,116,112,115,58,47,47,114,101,112,111,46,104,101,120,46,112,109>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},<<109,35,233,51,19,120,181,254,34,48,148,241,46,107,129,154,0,98,25,249,232,203,36,48,2,244,67,227,124,183,31,58>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},<<32,81,15,21,98,72,37,163,109,219,84,162,68,143,219,195,192,253,104,216,90,139,229,208,195,81,73,244,140,232,140,95>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},<<1,123,136,115,118,56,207,113,196,97,112,248,67,81,6,110,253,61,18,28,104,204,142,220,191,198,92,140,70,60,124,188>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},<<227,14,75,190,99,54,83,165,194,218,67,202,180,42,97,98,62,10,204,128,239,64,195,33,188,41,240,214,152,105,123,211>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},<<37,176,134,181,185,240,219,77,168,137,42,78,21,67,87,112,109,29,219,116,166,190,176,5,234,235,228,11,96,67,46,140>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},<<37,60,24,199,220,111,194,114,144,177,245,7,243,173,198,134,63,67,150,176,153,208,235,57,110,60,14,88,220,254,14,228>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},<<254,200,102,14,183,115,62,228,17,123,133,245,87,153,253,56,51,235,118,154,109,247,28,207,137,3,232,220,84,71,207,206>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},<<62,237,27,195,243,77,87,39,160,17,171,132,162,2,48,244,189,216,187,43,156,7,195,173,13,207,65,36,16,35,26,116>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},<<88,138,11,103,237,12,69,178,31,1,133,21,252,71,142,250,200,60,8,134,97,189,88,136,49,228,28,144,115,168,24,251>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},<<245,131,207,95,146,14,6,187,25,227,36,29,139,227,242,66,199,98,16,105,185,125,1,19,130,88,232,183,165,73,55,89>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},<<38,30,64,121,8,118,140,103,246,243,173,85,119,190,179,66,64,69,24,207,58,141,28,37,249,112,76,8,167,126,137,109>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,55>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,50>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},<<239,16,142,100,198,224,134,54,75,159,21,176,7,60,247,148,6,22,112,175,143,51,29,84,93,115,8,192,186,46,103,249>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},<<244,176,215,37,57,47,193,87,159,2,33,179,207,112,170,174,89,243,238,225,104,54,215,40,142,180,84,243,238,92,236,34>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},<<6,226,97,227,131,224,52,157,213,38,1,41,250,163,1,194,149,246,193,17,186,67,197,125,164,250,148,154,32,14,198,10>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},<<110,125,164,69,241,34,142,178,227,58,182,153,25,226,63,248,245,119,212,177,213,64,199,18,55,58,247,109,196,24,107,86>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},<<68,68,200,121,190,50,59,27,19,62,236,82,65,203,132,189,56,33,234,25,76,116,13,117,97,126,16,107,228,116,67,24>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},<<133,128,81,127,114,25,171,182,235,26,100,132,19,211,194,49,151,164,153,232,238,12,184,91,99,120,17,14,55,59,18,213>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<79,89,119,17,222,247,188,179,135,133,25,245,127,149,88,219,60,157,134,138,238,65,83,94,220,220,32,170,192,179,158,104>>},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},<<139,206,65,63,178,82,52,228,110,97,243,99,163,106,208,125,204,229,50,39,152,45,198,78,39,33,182,228,14,218,121,129>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},<<81,246,136,145,163,141,81,134,186,106,76,12,20,143,89,179,61,32,176,104,22,137,118,253,37,189,252,15,87,52,127,11>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},<<195,69,224,144,224,166,27,243,62,3,133,170,58,211,148,252,183,216,99,227,19,188,63,202,82,46,57,12,127,57,22,110>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},<<42,36,205,38,187,111,153,246,43,113,23,68,183,101,166,2,86,8,105,191,53,227,14,136,204,113,61,233,238,209,143,84>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},<<247,30,210,221,230,58,44,168,206,231,133,5,145,64,254,121,160,122,142,67,65,133,52,199,94,32,21,56,185,12,31,185>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},<<37,197,50,228,112,40,226,226,200,173,244,33,206,111,103,148,142,12,240,189,28,82,181,235,239,93,174,30,205,11,213,57>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},<<102,119,195,9,132,22,101,46,0,16,158,203,221,72,26,117,90,45,1,123,86,124,29,233,255,150,17,77,155,211,112,222>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},<<200,66,29,78,110,110,240,221,124,43,100,255,99,88,159,133,97,17,104,8,250,0,61,221,253,83,96,205,231,187,70,37>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},<<110,242,4,161,146,102,97,79,26,253,146,158,179,97,109,29,238,246,204,16,68,112,136,157,53,109,87,15,3,200,225,9>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},<<77,59,189,15,115,5,117,64,83,222,177,167,29,64,142,111,86,197,20,166,97,46,12,55,146,237,131,198,208,64,83,56>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},<<145,11,107,111,136,138,168,176,247,155,220,168,171,244,206,33,214,76,152,252,135,182,186,139,106,231,242,237,34,85,28,250>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},<<250,117,237,79,53,92,212,171,70,140,37,88,129,113,248,0,42,114,116,211,213,251,55,108,24,130,45,223,199,195,63,31>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},<<55,22,115,65,12,47,255,214,210,143,212,1,46,20,129,42,194,174,6,189,33,143,251,177,14,66,125,144,48,22,123,164>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},<<58,232,236,78,152,164,72,80,212,148,216,68,28,136,150,99,28,41,91,53,65,202,199,145,229,110,160,136,91,167,223,63>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},<<61,185,230,46,44,28,161,19,175,18,170,70,80,45,240,194,135,37,230,108,123,136,85,141,215,79,126,9,208,150,16,97>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},<<156,134,0,130,46,137,78,60,49,190,216,0,199,138,90,4,129,43,113,166,229,165,101,100,38,198,206,1,235,226,207,28>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},<<176,130,101,218,0,52,39,160,71,207,77,50,70,74,228,200,25,201,193,58,33,248,106,182,237,228,254,60,75,17,130,13>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},<<193,161,143,73,89,230,43,235,247,57,148,115,147,245,50,120,152,244,141,35,155,229,70,99,224,124,118,140,27,4,35,95>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<54,130,193,140,107,7,72,13,242,18,45,13,175,92,5,69,123,66,193,153,15,25,124,227,222,83,136,78,139,168,52,196>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},nil},{{registry_etag,<<104,101,120,112,109>>,<<101,120,106,115,120>>},<<34,57,55,55,51,50,101,97,48,57,57,99,48,50,52,54,49,48,100,101,98,50,56,48,98,53,99,51,48,53,48,54,57,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},<<130,21,194,175,29,228,95,184,230,195,55,162,116,96,70,107,74,199,100,242,153,214,66,233,10,59,99,52,115,106,73,247>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},<<2,74,88,8,199,219,172,173,7,228,200,251,223,183,96,201,108,45,40,115,94,67,214,95,26,241,22,67,164,211,163,242>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},<<63,208,188,230,213,18,226,108,43,136,22,146,172,159,239,246,137,34,85,58,6,102,165,218,96,119,83,232,103,228,27,155>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},[]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},<<237,23,149,15,205,126,155,227,41,243,69,35,98,160,227,11,231,58,5,81,27,11,147,229,222,71,25,123,128,187,20,150>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},<<18,178,40,37,226,47,70,140,2,235,62,75,153,133,243,208,203,141,196,11,155,215,4,115,14,250,17,171,210,112,140,68>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},<<27,197,191,30,79,210,73,16,65,120,240,136,80,48,188,215,90,69,38,244,210,161,233,118,244,180,40,211,71,97,79,15>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},<<33,232,214,152,48,145,102,15,57,79,68,167,193,31,140,241,244,103,175,178,170,218,31,207,89,194,241,181,144,164,47,104>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},<<119,30,145,149,5,203,227,153,223,95,73,184,162,28,86,175,82,37,84,44,165,200,119,224,186,160,197,3,239,180,230,38>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},<<44,107,172,83,3,113,61,27,67,202,111,60,136,23,103,245,123,42,223,102,140,222,48,19,189,113,87,220,101,239,41,156>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},<<206,219,47,35,1,113,230,209,4,35,174,232,206,144,81,40,51,176,126,151,135,71,204,131,107,15,44,3,127,207,119,157>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},<<216,179,241,114,0,115,65,60,54,162,30,86,161,209,17,42,77,103,169,173,14,201,0,67,126,254,208,139,57,229,21,178>>},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},<<140,102,178,169,55,154,72,235,237,246,174,23,188,43,114,195,171,233,203,219,247,130,73,57,128,105,103,50,97,1,195,113>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},<<143,86,163,52,2,26,42,207,236,45,147,7,8,208,240,25,53,241,101,76,138,222,121,119,187,241,248,235,72,67,9,114>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},<<211,204,184,64,223,176,111,47,144,166,211,53,181,54,221,7,77,183,72,179,231,245,177,26,182,29,35,149,6,88,94,178>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},<<84,1,54,83,199,46,117,255,59,75,72,115,66,223,229,103,21,201,116,159,249,195,26,125,232,248,77,24,160,158,28,60>>},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},<<34,76,89,87,237,225,240,215,135,68,94,165,238,52,99,79,186,176,6,253,161,30,77,66,240,37,11,97,16,216,237,49>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<185,103,190,43,35,240,246,120,127,171,126,214,129,180,196,90,33,90,129,72,31,182,43,1,165,183,80,250,143,48,247,108>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<99,155,46,135,73,225,27,135,185,235,66,242,173,50,93,22,28,23,11,57,178,136,172,141,4,196,243,31,143,8,35,235>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},<<121,81,11,127,243,186,89,124,117,140,230,243,151,226,59,63,194,252,114,157,214,51,40,129,196,104,183,103,183,28,119,193>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},nil},{{versions,<<104,101,120,112,109>>,<<106,97,115,111,110>>},[<<49,46,48,46,48,45,114,99,46,49>>,<<49,46,48,46,48,45,114,99,46,50>>,<<49,46,48,46,48,45,114,99,46,51>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,49,46,50>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},<<91,77,36,239,254,189,6,15,70,111,180,96,236,6,87,110,123,52,160,15,194,107,35,79,228,241,44,79,5,201,89,71>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},<<169,93,11,105,81,121,24,152,163,206,220,239,254,220,191,5,237,12,236,64,183,236,156,58,96,112,180,210,34,162,42,171>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},<<218,31,129,51,81,87,77,55,61,179,235,87,157,45,159,228,185,29,239,194,50,224,8,39,238,90,163,139,86,196,193,210>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},<<101,91,237,185,64,198,75,180,213,141,96,128,203,130,4,177,249,36,215,227,22,137,13,7,134,172,127,144,251,154,104,212>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},<<144,94,191,180,229,77,90,141,108,61,184,90,151,227,68,244,0,142,188,59,117,227,37,235,243,184,143,105,204,82,97,188>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},<<82,128,175,154,172,67,47,245,202,66,22,208,62,138,147,243,34,9,81,14,146,91,96,231,242,124,51,121,111,105,230,153>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},[]},{{registry_etag,<<104,101,120,112,109>>,<<106,97,115,111,110>>},<<34,97,98,52,56,99,97,51,48,52,98,55,49,98,51,50,48,99,48,50,97,55,99,102,101,57,102,56,99,56,100,56,97,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},<<73,140,248,154,223,216,198,35,93,172,33,119,155,217,73,161,64,219,168,206,68,37,100,73,113,229,156,39,240,188,73,145>>},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},<<125,82,45,99,193,63,55,10,240,85,62,39,241,17,175,46,151,249,79,82,241,156,152,189,85,126,220,205,83,211,23,237>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},<<99,43,159,92,76,46,86,152,127,18,59,159,53,229,43,53,108,45,226,140,231,105,45,102,190,207,18,223,16,204,16,18>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},<<32,50,152,90,157,33,167,28,203,229,214,196,231,128,37,49,94,140,60,195,226,85,245,7,161,55,153,84,146,227,240,190>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},<<135,173,234,40,60,156,242,71,103,180,222,237,68,96,41,137,165,51,17,86,223,93,96,162,102,14,156,145,20,213,64,70>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},<<84,102,52,26,40,153,179,37,138,232,168,133,67,208,189,207,235,42,41,50,199,49,193,102,143,19,211,49,85,17,94,25>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},<<218,15,103,101,22,13,120,222,103,107,141,110,93,175,57,171,250,254,43,57,3,184,187,249,186,217,7,116,185,172,32,81>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},<<87,98,95,24,53,198,99,53,131,106,213,107,2,224,21,248,208,190,199,234,139,100,211,5,241,134,255,216,60,134,175,63>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},<<0,44,170,249,57,185,124,132,83,62,240,246,33,211,237,65,78,215,3,252,208,60,145,236,13,214,32,67,223,16,44,99>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},<<1,188,142,12,255,50,126,103,99,78,150,23,184,80,53,125,59,119,91,58,2,46,45,24,194,254,146,217,115,115,178,173>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,50,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},<<84,122,239,236,28,103,254,50,131,247,123,172,77,175,133,243,245,147,0,39,100,247,104,250,170,66,56,117,165,26,35,32>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},<<36,170,165,33,61,173,49,64,42,227,123,151,158,11,91,183,126,152,210,219,190,163,38,237,145,161,0,12,145,196,17,19>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},<<110,207,210,201,30,22,244,142,21,53,116,59,87,208,26,66,198,93,125,213,26,139,67,229,114,59,31,121,146,113,105,168>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},<<221,158,21,194,160,108,229,114,231,154,103,96,57,12,160,35,72,192,241,193,134,58,34,145,8,98,133,129,134,36,121,114>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},<<18,192,208,123,207,0,180,26,155,61,161,233,207,82,235,5,192,76,185,237,23,20,177,174,34,9,208,212,27,25,175,60>>},{{registry_etag,<<104,101,120,112,109>>,<<106,115,111,110>>},<<34,56,98,48,98,51,57,54,50,101,54,99,55,102,102,102,51,57,50,100,102,51,97,51,57,57,56,97,48,53,55,57,51,34>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},<<74,252,89,220,173,247,27,231,237,200,185,52,179,159,85,78,199,179,30,43,27,26,71,103,56,58,102,63,134,149,140,227>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},<<122,235,9,94,73,65,128,174,217,87,243,88,187,139,146,21,54,10,58,167,226,61,174,125,154,240,251,21,72,66,17,100>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},<<132,183,103,162,219,142,204,47,7,187,132,252,180,245,79,37,22,12,7,161,218,226,124,70,11,63,12,64,191,203,247,159>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},<<90,37,120,140,106,49,22,1,230,80,215,11,31,65,165,48,229,2,135,187,16,203,136,231,38,235,222,72,243,27,160,19>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<47,127,203,236,44,53,3,75,173,226,249,113,127,119,5,157,197,78,180,233,41,163,4,156,167,186,103,117,192,189,102,205>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},<<87,231,124,218,254,52,118,157,204,17,76,108,36,152,71,182,99,4,229,72,152,145,48,107,151,98,227,33,21,32,215,103>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},<<228,10,21,153,48,36,160,203,79,94,34,129,109,107,227,64,2,204,68,99,198,23,137,237,53,236,148,196,25,17,235,238>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},<<65,15,82,8,188,174,84,27,249,65,179,242,117,110,91,181,164,200,105,77,127,253,107,52,185,9,174,136,38,38,41,192>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,50,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},<<114,192,119,214,28,104,4,106,65,50,246,197,185,28,62,118,157,147,111,245,38,78,44,46,155,203,221,7,141,223,92,139>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},<<158,206,25,186,234,42,11,160,204,226,167,220,175,197,212,98,51,88,47,253,21,126,117,89,227,31,149,135,213,169,181,63>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},<<51,221,215,227,240,137,141,26,124,212,235,117,88,77,41,16,14,43,149,75,115,25,59,120,255,172,203,118,182,37,87,124>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},<<29,227,205,145,60,190,39,174,240,172,159,191,122,176,110,194,117,248,93,162,139,55,96,100,128,73,153,209,214,51,54,122>>},{{tarball_etag,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<34,56,102,55,99,97,50,51,97,98,99,57,49,97,50,55,51,54,49,56,49,48,53,101,50,50,48,101,50,54,101,56,54,34>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},<<10,15,244,148,212,41,101,199,80,103,93,163,225,174,2,244,58,151,127,76,237,209,79,159,115,152,247,177,247,37,52,29>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{tarball_etag,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<34,98,53,57,50,48,50,55,100,97,54,55,57,54,50,52,53,51,52,98,102,50,97,54,102,98,53,56,55,53,50,48,55,34>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},<<0,37,224,56,226,242,232,197,200,36,13,24,188,252,17,177,239,225,162,86,113,101,111,197,178,253,214,112,245,72,222,52>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},<<195,82,1,177,8,228,28,72,227,114,232,11,96,68,62,247,80,197,149,184,170,81,79,194,0,203,163,102,160,198,148,126>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},<<202,206,70,199,228,211,195,137,83,97,35,95,153,209,171,40,0,66,70,95,65,24,43,199,248,227,12,128,57,234,141,238>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<134,98,110,28,137,164,173,154,150,208,217,198,56,249,232,140,35,70,184,155,75,161,97,25,136,89,78,190,114,181,213,238>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},<<32,148,247,67,145,142,28,56,34,176,168,194,101,235,122,232,17,137,54,221,78,15,4,198,43,185,189,243,103,109,206,77>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},<<186,18,120,225,178,159,95,62,106,182,103,31,102,14,69,51,3,211,120,198,158,96,125,120,128,129,117,114,146,160,144,252>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},<<16,236,251,46,47,210,22,214,69,26,247,28,241,79,39,110,6,58,9,110,21,182,133,222,117,53,253,104,4,102,201,181>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},<<162,54,21,16,103,251,60,169,201,96,54,128,105,50,209,5,210,224,199,188,179,119,133,19,239,254,106,108,59,35,58,96>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},<<104,186,213,50,136,223,34,192,154,2,173,163,162,246,198,21,61,38,39,241,0,221,207,182,197,73,6,12,12,124,201,100>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},<<185,108,64,14,4,183,183,101,192,133,76,5,164,150,99,35,233,12,13,17,254,224,72,59,21,103,205,160,121,171,178,5>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<107,156,170,216,147,0,6,249,187,53,104,12,93,51,17,145,122,198,118,144,195,175,27,160,24,98,51,36,192,21,171,229>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},<<75,178,27,173,213,26,50,173,80,237,204,229,78,83,18,172,240,121,163,188,119,15,38,108,25,151,7,28,127,202,223,23>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},<<221,84,236,175,169,116,61,21,164,128,166,157,237,246,104,174,139,137,135,221,19,11,237,83,29,1,222,45,224,219,114,231>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},nil},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},<<72,227,29,177,140,35,191,51,200,56,93,63,114,178,112,129,75,142,94,101,7,17,152,154,152,201,40,95,125,184,34,154>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},<<157,73,129,3,242,145,156,200,208,187,143,59,95,44,211,110,52,23,4,176,180,198,37,162,255,245,156,162,15,247,71,41>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},<<247,113,245,135,196,139,72,36,180,151,226,163,227,116,247,94,147,239,1,252,50,152,115,176,137,163,245,221,150,27,128,184>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,56,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},<<107,98,70,96,40,214,224,171,62,198,128,92,81,244,168,134,41,230,152,183,29,248,224,31,165,92,92,74,49,174,190,107>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},<<217,80,154,44,34,147,65,79,12,138,178,35,105,23,194,141,154,6,6,227,139,49,72,11,47,118,177,203,206,191,151,106>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},<<50,233,88,32,169,124,255,234,103,131,14,145,81,74,42,213,59,136,136,80,68,45,109,57,95,83,161,172,96,200,46,7>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},<<78,11,98,214,130,174,195,158,78,57,14,68,30,160,215,192,105,236,113,7,125,50,29,14,191,107,107,132,184,187,224,14>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},<<189,147,202,5,190,120,188,182,21,156,113,118,35,14,254,218,47,114,79,127,253,72,85,21,23,92,164,17,223,244,137,62>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},<<169,229,80,242,36,189,255,58,16,215,240,101,26,114,153,139,19,9,138,176,142,116,249,197,115,127,195,192,9,193,73,244>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},<<207,150,227,40,255,93,105,131,141,216,156,33,169,219,34,113,107,252,198,239,119,46,157,157,221,247,186,98,33,2,114,45>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},<<153,68,136,43,113,245,91,37,3,102,61,156,181,77,63,28,123,189,247,204,109,208,28,196,14,168,239,81,32,118,1,236>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},<<82,54,119,31,28,24,178,146,208,95,163,243,177,122,136,230,32,65,105,41,167,111,111,118,7,160,99,84,190,131,223,24>>},{{outer_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},<<135,127,234,43,242,218,43,254,7,15,21,41,123,8,7,71,49,179,188,18,38,45,143,107,78,19,192,216,24,213,249,168>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},<<189,7,50,202,74,249,220,189,146,187,33,246,250,40,136,15,241,188,169,205,77,7,75,194,228,0,198,145,168,209,85,118>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},<<149,118,239,96,88,227,41,46,166,187,103,13,17,248,78,112,72,72,8,195,85,212,132,253,23,194,167,73,212,11,194,62>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},<<16,133,39,148,221,224,88,193,239,122,91,157,83,212,8,217,4,194,7,110,159,171,116,172,67,252,103,109,50,227,218,211>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},<<104,88,36,229,132,191,61,160,87,32,192,27,172,250,97,83,74,146,65,218,18,153,47,252,202,228,121,91,78,60,255,13>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},<<14,162,56,244,6,131,29,242,159,119,29,183,115,21,64,93,136,12,158,247,184,24,166,176,224,171,162,102,83,9,225,162>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},<<166,205,48,197,65,197,88,166,153,53,225,143,53,60,152,143,83,17,120,10,34,121,62,7,25,7,215,99,1,102,158,87>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},<<96,84,136,65,224,33,45,244,1,227,142,99,192,7,142,197,123,51,231,234,73,176,50,199,150,204,173,140,222,121,75,92>>},{{registry_etag,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},<<34,102,55,101,51,53,50,53,49,100,57,98,98,56,97,55,53,52,102,56,50,101,57,50,48,55,54,49,97,101,55,100,48,34>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},<<119,62,225,102,102,158,178,27,82,151,206,65,179,199,180,116,190,9,110,184,237,5,45,69,112,129,40,154,28,242,80,122>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},<<222,146,226,188,133,188,9,236,103,111,25,246,236,45,170,89,186,31,1,3,209,218,150,207,12,202,54,52,44,144,217,63>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},<<128,220,240,222,73,203,3,63,153,109,104,148,40,239,110,246,39,234,5,148,48,125,245,11,76,26,253,160,152,224,73,57>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},<<150,52,188,163,15,47,116,104,221,227,231,4,213,134,83,25,177,235,136,228,168,205,237,92,153,91,175,10,169,87,82,79>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},{{2020,5,25},{14,32,1}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},<<89,208,170,245,32,158,59,80,103,69,138,80,59,168,11,115,136,213,101,180,134,161,131,77,199,158,216,113,202,46,175,195>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},<<83,93,248,66,116,16,163,147,66,189,186,61,17,181,60,80,132,232,115,81,105,99,126,190,213,196,76,215,14,171,0,35>>},{{inner_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},<<83,94,167,230,0,203,28,107,161,123,83,2,146,102,217,215,236,84,206,41,191,176,93,144,108,67,57,7,172,250,1,202>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},<<48,205,79,245,245,147,253,210,24,169,178,111,60,36,213,128,39,79,41,125,136,173,67,56,58,254,82,91,21,67,177,101>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{versions,<<104,101,120,112,109>>,<<101,120,106,115,120>>},[<<51,46,48,46,48>>,<<51,46,48,46,49>>,<<51,46,48,46,50>>,<<51,46,49,46,48>>,<<51,46,50,46,48>>,<<51,46,50,46,49>>,<<52,46,48,46,48>>]},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},<<124,16,141,227,48,56,16,40,44,161,17,236,192,147,138,120,230,2,246,180,240,203,107,144,253,245,47,149,209,152,5,159>>},{{registry_etag,<<104,101,120,112,109>>,<<99,115,118>>},<<34,97,100,100,55,56,54,48,50,49,54,100,56,97,49,56,57,54,51,97,101,97,97,102,53,100,98,54,55,50,52,49,100,34>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},nil},{{versions,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},[<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,52,46,48>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>,<<50,46,48,46,48>>,<<50,46,48,46,49>>,<<50,46,49,46,48>>,<<50,46,50,46,48>>,<<51,46,48,46,48>>,<<51,46,49,46,48>>,<<52,46,48,46,48>>,<<52,46,48,46,49>>]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},<<137,28,32,233,180,214,31,0,187,29,21,255,46,29,244,81,14,48,42,7,254,77,205,184,84,193,108,34,59,72,29,163>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},<<64,95,116,217,92,226,6,190,163,171,188,216,241,63,34,144,224,191,223,138,75,210,50,253,14,103,194,242,36,158,40,119>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},<<219,220,236,81,73,70,188,141,202,177,215,125,255,119,25,67,122,133,217,134,23,144,134,74,177,33,85,237,163,253,111,175>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},<<64,60,123,48,80,27,93,51,205,168,188,107,254,48,127,89,219,1,95,199,37,86,122,86,4,218,231,246,5,165,30,23>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},<<23,26,137,155,34,80,224,72,191,89,178,41,171,37,52,247,77,137,44,170,243,29,184,245,90,242,156,26,6,1,71,84>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},<<212,25,22,44,178,213,190,128,7,8,53,194,194,184,199,140,140,69,144,119,6,201,145,210,63,55,80,218,229,6,209,233>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},<<98,26,26,62,83,107,158,33,99,236,107,176,120,77,253,229,236,19,218,138,190,196,107,183,101,189,126,177,248,173,21,2>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},<<16,4,241,79,86,196,247,98,133,76,72,46,15,233,45,98,116,227,208,7,139,61,112,228,178,238,179,183,158,39,81,7>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,48>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,52>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},<<127,124,167,45,243,210,158,82,45,55,170,37,73,44,171,71,77,10,229,214,151,31,14,228,151,173,141,53,228,113,230,18>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},[]},{{tarball_etag,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<34,52,97,49,99,50,56,100,54,102,99,101,99,101,52,55,98,57,100,99,55,50,99,55,98,51,55,54,97,98,54,57,100,34>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},<<194,18,58,158,240,37,55,126,12,183,146,202,226,3,176,251,111,81,83,62,45,9,138,157,207,126,43,240,18,221,33,194>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},<<65,187,150,11,83,70,108,214,173,17,69,125,17,35,97,202,136,39,117,191,125,180,99,135,76,143,51,51,188,33,103,11>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},<<206,105,157,49,102,44,52,218,135,131,255,23,171,152,12,99,80,186,80,189,130,71,85,105,219,224,255,146,149,83,217,202>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},<<160,88,176,66,166,90,171,75,107,220,254,73,23,150,200,208,67,105,54,44,172,223,141,93,75,234,156,81,112,151,208,56>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},<<212,141,245,144,223,87,155,221,0,80,100,173,189,113,121,215,58,16,127,66,211,111,231,208,3,30,84,74,107,99,80,70>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},<<11,227,252,24,76,188,187,142,189,106,131,138,205,120,113,127,255,251,223,137,247,195,149,152,149,248,127,212,147,195,55,79>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},<<222,148,84,174,200,249,97,163,28,227,188,38,197,39,87,121,10,152,130,7,85,93,208,130,110,90,96,165,229,244,16,167>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},<<215,201,232,38,14,156,220,31,178,203,119,226,217,3,149,105,98,193,247,97,87,235,130,0,126,198,189,229,218,171,101,210>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},<<137,43,68,99,179,173,216,203,10,28,104,252,69,224,60,98,151,137,89,121,189,12,119,40,52,96,186,217,13,2,157,195>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},<<86,11,223,183,68,158,61,221,35,160,150,146,159,185,252,33,34,247,9,188,199,88,178,213,213,165,199,208,234,132,137,16>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},<<135,70,99,76,186,2,83,179,168,68,50,96,128,215,141,77,124,129,171,147,194,248,161,18,241,10,234,167,248,181,81,137>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},<<109,146,154,92,130,248,99,214,32,28,161,252,218,171,38,179,85,143,41,221,224,211,160,34,229,242,200,221,175,180,203,22>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},<<33,182,157,95,117,31,169,225,236,145,71,77,68,247,183,80,73,20,184,249,214,168,53,45,56,133,111,119,129,224,124,53>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},<<182,89,184,87,29,238,223,96,247,156,90,96,142,21,65,64,133,250,20,19,68,226,113,111,189,105,136,160,132,181,249,147>>},{{registry_etag,<<104,101,120,112,109>>,<<106,115,111,110,101>>},<<34,49,57,98,48,101,54,101,54,53,97,53,48,102,52,98,97,98,57,100,51,102,54,99,52,100,55,49,56,57,55,102,97,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},<<18,52,153,51,188,38,72,236,120,159,155,27,62,139,58,235,92,234,198,54,131,247,95,139,203,7,135,0,36,91,135,76>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},<<3,204,80,111,88,227,177,218,36,255,228,114,121,197,14,205,7,16,167,169,40,52,192,58,35,38,244,226,34,80,213,77>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},{{2020,5,25},{14,32,1}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},<<142,100,15,158,141,162,129,223,90,1,24,144,127,209,142,52,140,31,35,205,199,71,41,100,142,232,55,174,217,27,140,41>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},<<110,77,136,127,221,142,139,234,129,238,215,150,170,88,155,200,14,52,183,137,97,121,182,132,249,117,202,184,58,27,23,62>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},<<243,164,124,34,50,116,36,41,23,88,22,125,243,196,96,13,207,139,243,71,149,163,120,118,18,1,154,165,184,106,92,33>>},{{registry_etag,<<104,101,120,112,109>>,<<116,105,110,121>>},<<34,52,56,50,102,99,55,97,98,97,101,97,53,57,51,100,55,57,48,56,51,98,56,102,57,51,56,51,50,49,54,53,99,34>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},<<223,18,100,181,135,27,186,248,218,79,17,254,173,250,13,198,97,244,213,17,73,58,37,248,249,199,214,21,224,214,20,213>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{registry_etag,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},<<34,52,54,57,51,51,55,102,53,98,99,52,97,98,101,52,53,101,102,102,102,52,49,100,55,102,51,53,97,56,101,56,99,34>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},[]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},<<153,47,46,20,24,132,154,50,111,209,217,40,120,1,250,45,134,9,29,180,249,97,31,96,120,29,166,210,54,246,76,212>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},<<188,191,142,48,184,96,93,175,22,10,140,42,41,213,74,23,46,82,15,75,160,227,94,17,122,106,162,64,96,208,159,6>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},<<134,43,66,142,238,151,53,86,202,20,87,227,90,179,116,64,212,100,70,163,29,10,225,195,21,84,14,86,121,107,130,18>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},<<121,180,219,142,142,93,115,110,206,124,216,109,238,5,68,39,61,188,79,192,147,122,157,207,219,65,51,176,151,41,238,29>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},<<236,46,10,245,110,159,244,179,185,65,1,43,210,244,121,186,27,11,70,167,34,228,39,178,62,59,94,154,116,170,30,7>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},<<24,34,98,146,249,177,109,241,247,196,117,36,59,152,185,133,59,170,233,18,101,88,198,253,222,53,77,27,159,120,134,56>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},<<93,247,164,66,223,130,94,189,46,62,187,41,162,225,127,106,224,29,28,211,74,91,252,182,200,47,50,23,125,76,241,48>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},<<43,202,208,207,98,31,178,119,202,187,182,65,49,89,205,58,163,2,101,194,222,228,44,150,134,151,152,139,48,16,134,4>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},<<156,4,35,121,62,187,118,245,82,245,191,173,131,219,120,194,17,60,104,78,153,237,178,24,144,111,162,40,179,216,152,119>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},<<222,84,131,50,37,176,230,127,33,219,71,51,58,8,104,90,237,80,215,120,162,241,28,247,227,106,233,227,254,78,225,7>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},<<239,82,71,134,18,4,215,101,218,196,201,174,239,141,242,228,84,208,44,85,221,176,130,198,199,103,181,203,151,45,101,25>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},<<166,252,251,218,190,26,239,145,25,184,113,48,72,70,177,206,40,45,154,65,36,188,221,175,199,97,108,26,37,108,117,150>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},nil},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},<<195,39,7,44,190,185,154,8,86,82,207,17,10,122,61,93,123,153,249,69,104,209,73,124,167,105,113,200,128,97,85,90>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},<<157,237,151,116,241,241,18,204,84,77,130,229,249,169,5,160,22,134,47,147,186,137,249,131,214,167,226,80,145,239,226,61>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},<<227,19,177,246,201,71,212,213,150,103,66,219,100,159,247,226,103,54,224,132,176,162,127,161,246,74,202,120,50,120,28,196>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{versions,<<104,101,120,112,109>>,<<114,101,99,111,110>>},[<<50,46,50,46,48>>,<<50,46,50,46,49>>,<<50,46,51,46,48>>,<<50,46,51,46,49>>,<<50,46,51,46,50>>,<<50,46,51,46,51>>,<<50,46,51,46,52>>,<<50,46,51,46,53>>,<<50,46,51,46,54>>,<<50,46,52,46,48>>,<<50,46,53,46,48>>]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},<<105,102,54,18,176,225,123,172,122,29,127,26,69,235,225,149,15,19,218,24,10,69,123,7,223,63,175,139,223,24,200,149>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},<<205,13,176,11,249,85,42,18,87,148,80,64,244,222,235,41,152,176,92,122,1,134,215,152,246,224,234,5,150,141,178,69>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},<<115,202,129,241,107,232,194,63,12,196,113,10,2,108,189,79,223,95,106,26,181,126,18,239,173,150,230,121,68,48,145,183>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},<<100,138,6,120,148,118,36,173,36,113,234,134,221,36,183,85,146,46,13,252,198,141,103,234,183,3,39,143,217,90,195,253>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},<<245,199,26,148,95,141,215,232,196,255,70,217,165,239,28,179,84,167,13,19,17,210,130,238,249,36,12,66,39,157,53,206>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},<<194,86,85,6,198,33,238,1,14,113,208,95,85,94,57,161,185,55,224,8,16,226,132,188,133,70,58,77,78,252,75,0>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},<<137,173,179,41,68,72,116,128,150,65,204,47,100,90,236,43,211,141,253,132,30,127,228,193,179,188,162,230,249,26,26,243>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},<<97,30,5,50,254,221,69,36,250,157,80,45,165,247,59,154,203,174,132,156,144,9,236,40,125,217,158,208,156,33,90,65>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},<<16,4,52,24,196,45,36,147,208,238,33,45,63,221,210,93,127,254,72,67,128,175,173,118,154,10,56,121,89,56,228,72>>},{last_update,{{2020,5,24},{12,2,37}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},<<8,68,93,118,243,173,53,7,188,74,243,14,175,216,130,96,192,243,92,80,56,84,42,242,119,171,208,151,91,225,234,38>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},[]},{{versions,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,51,46,48>>,<<48,46,52,46,48>>,<<48,46,53,46,48>>,<<48,46,54,46,48>>,<<48,46,55,46,48>>,<<48,46,56,46,48>>,<<48,46,57,46,48>>,<<48,46,49,48,46,48>>,<<48,46,49,49,46,48>>,<<48,46,49,50,46,48>>,<<48,46,49,50,46,49>>,<<48,46,49,51,46,48>>,<<48,46,49,51,46,49>>,<<48,46,49,51,46,50>>,<<48,46,49,52,46,48>>,<<48,46,57,57,46,48>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},<<37,36,182,192,229,65,48,157,150,154,204,247,95,119,225,209,101,62,70,20,42,252,104,233,234,79,243,85,89,167,148,188>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},<<20,151,21,176,8,250,42,138,93,102,63,203,224,145,118,224,55,223,64,46,3,70,180,142,177,159,86,181,159,41,141,202>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},<<22,126,93,61,210,231,113,110,88,101,245,168,208,100,215,169,247,0,69,22,199,150,104,64,131,241,205,24,12,45,66,150>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},<<14,242,17,138,101,206,8,117,186,112,255,37,243,141,34,183,238,117,142,105,157,107,69,214,18,238,190,251,138,78,156,223>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,54,46,50>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},<<57,207,144,243,58,96,58,98,157,34,38,230,75,17,40,154,45,77,70,176,162,107,166,24,211,104,11,188,120,28,232,230>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},<<215,231,114,197,69,168,223,20,71,144,195,137,29,9,227,190,159,145,121,101,235,192,190,211,1,248,253,141,59,49,144,89>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},<<118,22,145,160,177,206,15,76,126,133,17,176,155,95,44,211,24,192,13,165,39,3,149,99,126,78,13,90,127,71,188,69>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},<<165,252,198,94,200,215,66,117,153,236,145,91,159,135,228,53,41,209,80,151,173,249,228,60,150,236,86,115,175,87,212,46>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},<<217,196,187,165,244,253,121,45,191,150,34,0,67,83,251,201,249,118,86,33,218,135,58,172,135,166,143,252,81,205,108,102>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},<<253,239,107,136,195,29,76,34,224,117,107,33,94,103,115,31,76,39,57,250,253,19,168,240,150,226,247,69,122,201,252,195>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},<<209,58,175,98,35,37,188,63,41,27,181,3,65,188,232,64,202,189,196,173,88,90,98,193,228,202,166,173,91,224,0,0>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},<<83,185,186,191,253,24,107,180,251,159,221,71,232,164,66,184,241,141,184,20,151,255,163,165,91,90,95,89,111,90,200,20>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},<<18,120,164,87,222,184,217,145,53,195,120,183,31,102,242,30,40,61,138,222,164,38,37,42,63,143,94,0,60,83,106,123>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},[]},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},<<17,103,71,219,224,87,121,76,58,62,78,20,59,124,131,144,178,159,99,78,22,199,138,127,89,186,117,191,166,133,46,127>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<62,61,32,48,46,51,46,49>>,false}]},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},<<127,52,144,106,8,57,243,180,155,155,118,71,70,28,81,68,120,118,17,245,153,232,215,67,33,66,128,118,22,153,223,43>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},<<178,113,90,174,185,245,73,244,227,7,57,212,57,147,227,193,177,5,58,78,214,157,80,198,96,98,27,221,30,185,102,6>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},<<27,101,19,39,242,48,107,254,16,227,73,222,227,142,116,11,12,85,4,38,19,142,188,67,255,207,5,134,97,188,172,191>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},<<59,28,140,11,227,44,39,32,207,5,135,132,129,87,236,95,14,20,247,84,219,99,34,156,52,187,19,90,94,236,181,40>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},<<170,252,202,255,79,141,45,31,52,224,172,76,175,193,98,54,166,88,204,228,48,180,138,64,56,197,131,141,70,72,161,3>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},<<102,178,17,249,191,216,75,217,126,109,27,234,221,248,252,35,18,170,171,225,146,247,118,232,147,28,176,193,111,83,165,33>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},<<99,11,135,164,61,90,213,41,40,103,253,138,103,49,217,123,60,131,58,11,150,140,210,3,25,183,9,32,254,241,64,107>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},<<197,103,12,1,118,217,143,197,134,60,112,72,163,173,92,172,44,1,81,110,133,253,40,176,162,35,166,106,125,235,140,234>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},<<139,29,56,94,0,231,8,1,161,47,107,212,62,182,79,116,124,79,114,200,142,82,63,143,13,50,118,165,19,92,160,11>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},<<81,155,194,9,228,67,57,97,40,65,116,196,151,200,82,76,0,30,40,91,121,189,248,2,18,180,122,31,137,128,132,204>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},<<153,157,191,5,166,154,48,207,230,159,28,50,23,123,19,188,187,118,12,110,235,200,231,70,167,54,130,189,127,223,71,171>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},<<136,22,143,146,203,209,35,224,41,13,135,208,161,202,128,3,232,99,170,67,10,225,114,87,177,231,195,222,195,33,119,158>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},<<107,28,158,90,196,46,147,42,252,22,12,197,14,199,233,99,80,198,218,241,185,31,141,68,60,125,126,195,82,41,208,197>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},<<140,130,155,178,142,63,49,106,54,18,22,49,68,5,254,41,109,141,210,253,116,9,223,165,63,164,172,28,255,55,151,160>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},<<60,195,226,58,205,234,110,131,64,115,25,39,91,193,250,174,216,30,159,132,1,73,217,241,199,203,174,78,19,145,128,169>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},<<237,219,26,93,59,77,123,35,81,161,38,128,137,110,199,146,141,6,221,79,48,163,15,78,229,139,66,151,205,242,65,111>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},nil},{{versions,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},[<<48,46,49,46,48>>,<<48,46,49,46,49>>,<<48,46,49,46,50>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52>>,<<49,46,48,46,53>>,<<49,46,48,46,54>>]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},{{2020,5,25},{14,32,1}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},{{2020,5,25},{14,32,6}}}]. diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam index 89e9372a03baf38c3df14982e244237363410fa4..166a8db0e5398a8243c86662f215cfca80384382 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam index 6600dacb10e2149c95274182282f3f95c1d163f8..4b74b3e28199603123362da736d8fe3387ef111e 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_CBC_HMAC_SHA2.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_CBC_HMAC_SHA2.beam index 01be3c0fb3a8b22fe344c5860bfd594c1c298807..adeccb1fc16731b924cff54cd3d580c757c5b212 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_CBC_HMAC_SHA2.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_CBC_HMAC_SHA2.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_GCM.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_GCM.beam index 6d30202ba06de2cceeaf9c15f10d7111069d3036..c366799808262340d288c42aaf11be43c02610dc 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_GCM.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.AES_GCM.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam index f9667ecb1ec87ed1537a96354c8a31326dbb2597..88d9b1ae87cf042f035908a0175a658ee0208ab3 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam index 2fb7a095e3fec0453110507841bfaf3c6893a334..a8fdaa73fcd680497c6a1733af94d105548de1f3 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam index 8ef3a66ae4a2c1de747865802db7ffde7715927c..8ddc584abe1b6f8f520e230603a40e676e69dabe 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam index f8511d53e7480896b92c4619545b6d00ed01e7cf..57a368d70b424ec47a476cd5e848ed9d14440d87 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.VerifyHostname.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.VerifyHostname.beam index bbfcd7af764d96ab47c4f44863afb022c29c97aa..f7245e3cbf980a3a2441303d64d8dcb0d7a5573c 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.VerifyHostname.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.VerifyHostname.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam index 67dc69335f2a22f41be1f9342dadc49a79550e60..6f1b9ab599e9d4c00e1884bb8f4c811db1c52f67 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Mix.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Mix.beam index fc3cade7804c8b32a920250a8cb3765df67ffa9b..2d0277584533a4fb7de4c4e07ca64851e5ce9486 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Mix.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Mix.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam index e5b0efe036fc5c60292b31a5b686aa2119828f2c..309778d603c1752311c4ff8d44a9fab35f55af72 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.Server.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.Server.beam index 46565e6194c57adbb1ceb5314ff0ad675292d688..801798f5dbeb104208dab5101054c041dc5299e9 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.Server.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.Server.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam index 4906874c21a3678c2738eaa1b984a5de5faa2eed..edfff98c22267a4b76fa73d8bba680b661dec73d 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.RemoteConverger.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.RemoteConverger.beam index 52993eb532d786015d40dd0b417a9814ee9f9b45..9b1beab5e3c703379cc858701b956fd752ed4b39 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.RemoteConverger.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.RemoteConverger.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Repo.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Repo.beam index 5d3fd7cb9df7491ec70f9cb2e0356387e59b4b4a..3763a914820208a1e8be67f03b65b2fe82af4b42 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Repo.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Repo.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam index ba6a2cfdc7fa9a47ba626734a2e7c3c43af10633..b87cfe5e25e349536a97631bccfef686dd804985 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam index 2b646641605a99b97425a06b7da786310faf3115..48f99ce81fff038526176b4578058050de78fc56 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.SCM.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.SCM.beam index cbf71cfdf6d86d6887c94a69b7f1037f11740fd6..47291ba0fb18e9fd6aef052ae7754af884f2853e 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.SCM.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.SCM.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam index 88d2c18add7a10eeb33dc16f60d58d2f2fa336f2..57aebdfb6c2196a07e231770c33899b8bcd9ee15 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam index 0a4b45b709a76885bf0650f5643a097f85fc1c63..87db28f903608181a6724f5a871ce23dd164a4a7 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam index 7ab69bbb49d2c6d00c0d50621d31ed15a8635844..a4e82989a3e30c12380cdc753dd2dde5604b2304 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam index efcc5ffd408b65fc3fb5ea75d0063d0dff72ca40..6c541e75cd94cc47f12059252f16df6e94b0fd82 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam index ae92b01eeef56787d3f04f90e1f23144963352a1..4a9b8d65b54c9f9c0b647ab6b65eb95837d2063c 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Utils.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Utils.beam index 26c5c68f6df630637d9d10dac383667c4bb315b2..54c80aeb20c1e3c7b9feb899390e9afe3d4777cc 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Utils.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Utils.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Version.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Version.beam index 0f1e509406692305572ac7d4e5446d4bc70cdae2..cb4d2248c0a94f41d6fd91601a191bf82f4e8168 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Version.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Version.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam index c044a17b372e693df2a4fdaeb1037ad8737eb672..5eb13a1a349b9699765c28e26641de3f5fe0667e 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam index 44306cd6e9e63bfca5544ddfc126031cf631c8cc..3c6980e4eb6035e6ed9cc17398315b2420009611 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam index 95282ab30a74cd45ae68bd3c39f136700e396e0a..549f6bc533d9912255c44575698882600df5a011 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam index a955a36726493265cace0f9e600a94c76f6cef79..ad147b73759cd8704e3b950bf76485929ee76c32 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam index 8a6805c0404ef7a573d235a6b63b80ef8465eb3a..5b4857ef10092a4f01dd253c4a1bd28172148121 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam index d3a8b8422fed8616824ea94e5de875058cf373fe..b3dec5cfc6505db4c98f229f2c982740aed7d8bb 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam index c02958bd55358149a85575a0cd154ccf0ea1ab17..cc210a675c87aedc00e7bb04b4c29489ba415745 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam index cda48f70cb9468465bfecb587032964bf18f71cd..97838756589a6b2b5989ddaf99e23b5c1f88a197 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam index b2b10d3d6feafbac68d467fa5f9d7024ae87d1ea..e27d4c5b5bcafc00c3953542adfa4b8eccc29ad5 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam index 64c5cd24e1cd636ff0eea6a17bd5a42eff79f408..84606bb2933f6dbba4d1ef8db1ca4a7916bec278 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam index 2d8508b55c20da6dab5438effdae65899224c72e..985a9f9d2e1556493ec6678550e6d18f4433a2e3 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Repo.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Repo.beam index 5cb7f34b875741a7d0cb79eb67fe89cdbe832c38..1cac8ef89ab00c72561572b462f4f51e1349136e 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Repo.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Repo.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam index ce896d0ad2860e1ffd30c588143d704497e2ee49..34dc9d001f95157415dd0fddfd6dba4c0a4922d8 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam index 627ad9157575b63261b90ff7add84f7c53e68b4f..48cdc7e7716a76bdc92e75bf4d2522aa79f3d77a 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.User.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.User.beam index 2804508ef6a427b865f5ed34b67f9f86bee7107d..3de88aae0eba0063c2b916ce2af8f3a66f47b26e 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.User.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.User.beam differ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.beam index c7539c0947b17cd45618b8d6d6758e212047a922..34258fca7d6f537c635224a781615b353bd9f7ad 100644 Binary files a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.beam and b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.beam differ diff --git a/deps/amqp10_client/rabbitmq-components.mk b/deps/amqp10_client/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/amqp10_client/rabbitmq-components.mk +++ b/deps/amqp10_client/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/amqp10_client/src/amqp10_client_connection.erl b/deps/amqp10_client/src/amqp10_client_connection.erl index 4737b8b4b9c6483a02bbbb9ccb50737bcd0e485d..359af6d14861742189758826cc297ba94a54ae00 100644 --- a/deps/amqp10_client/src/amqp10_client_connection.erl +++ b/deps/amqp10_client/src/amqp10_client_connection.erl @@ -199,8 +199,8 @@ sasl_init_sent(#'v1_0.sasl_outcome'{code = {ubyte, 0}}, #state{socket = Socket} = State) -> ok = socket_send(Socket, ?AMQP_PROTOCOL_HEADER), {next_state, hdr_sent, State}; -sasl_init_sent(#'v1_0.sasl_outcome'{code = {ubyte, 1}}, - #state{} = State) -> +sasl_init_sent(#'v1_0.sasl_outcome'{code = {ubyte, C}}, + #state{} = State) when C==1;C==2;C==3;C==4 -> {stop, sasl_auth_failure, State}. hdr_sent({protocol_header_received, 0, 1, 0, 0}, State) -> diff --git a/deps/amqp10_client/src/amqp10_msg.erl b/deps/amqp10_client/src/amqp10_msg.erl index b57c7d423ed35f7f2a2cc71a3c8d0b1974618c71..a1b1779fa56619de2d93843c42307007aaeb8404 100644 --- a/deps/amqp10_client/src/amqp10_msg.erl +++ b/deps/amqp10_client/src/amqp10_msg.erl @@ -411,12 +411,18 @@ set_message_annotations( Anns1 = #'v1_0.message_annotations'{content = maps:to_list(Anns)}, Msg#amqp10_msg{message_annotations = Anns1}. +wrap_ap_value(true) -> + {boolean, true}; +wrap_ap_value(false) -> + {boolean, false}; wrap_ap_value(V) when is_integer(V) -> {uint, V}; wrap_ap_value(V) when is_binary(V) -> utf8(V); wrap_ap_value(V) when is_list(V) -> - utf8(list_to_binary(V)). + utf8(list_to_binary(V)); +wrap_ap_value(V) when is_atom(V) -> + utf8(atom_to_list(V)). %% LOCAL diff --git a/deps/amqp10_common/rabbitmq-components.mk b/deps/amqp10_common/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/amqp10_common/rabbitmq-components.mk +++ b/deps/amqp10_common/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/amqp_client/rabbitmq-components.mk b/deps/amqp_client/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/amqp_client/rabbitmq-components.mk +++ b/deps/amqp_client/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/amqp_client/src/amqp_direct_connection.erl b/deps/amqp_client/src/amqp_direct_connection.erl index 8231c2932fddfb8df03b8d683ecab8bff49ab28d..89f0c576e9626ee84b31e987f7738c56cf896f6d 100644 --- a/deps/amqp_client/src/amqp_direct_connection.erl +++ b/deps/amqp_client/src/amqp_direct_connection.erl @@ -214,10 +214,11 @@ ssl_info(Sock) -> case rabbit_net:ssl_info(Sock) of {ok, Infos} -> {_, P} = lists:keyfind(protocol, 1, Infos), - case lists:keyfind(cipher_suite, 1, Infos) of - {_,{K, C, H}} -> {P, K, C, H}; - {_,{K, C, H, _}} -> {P, K, C, H} - end; + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value( + selected_cipher_suite, Infos), + {P, K, C, H}; _ -> {unknown, unknown, unknown, unknown} end, diff --git a/deps/amqp_client/src/amqp_ssl.erl b/deps/amqp_client/src/amqp_ssl.erl index 36acca6aa3554bd6996f8172ef72c70750beaf11..ff2bddd55aee4c464a789ed573c333c6ea38824b 100644 --- a/deps/amqp_client/src/amqp_ssl.erl +++ b/deps/amqp_client/src/amqp_ssl.erl @@ -38,15 +38,9 @@ maybe_add_sni_0({server_name_indication, SniHost}, _Host, Options) -> maybe_add_sni_1(false, _Host, Options) -> % NB: host is not a DNS host name, so nothing to add Options; -maybe_add_sni_1(true, _Host, Options) -> - % NB: For RabbitMQ 3.7.x, log a warning - ?LOG_WARN("Connection (~p): Server name indication is not enabled for this TLS connection. " - "Please see https://rabbitmq.com/ssl.html for more information.~n", [self()]), - Options. - % TODO FUTURE 3.8.x - % SNI will become the default in RabbitMQ 3.8.0 - % Opts1 = [{server_name_indication, Host} | Options], - % maybe_add_verify_fun(lists:keymember(verify_fun, 1, Opts1), Host, Opts1). +maybe_add_sni_1(true, Host, Options) -> + Opts1 = [{server_name_indication, Host} | Options], + maybe_add_verify_fun(lists:keymember(verify_fun, 1, Opts1), Host, Opts1). maybe_add_verify_fun(true, _Host, Options) -> % NB: verify_fun already present, don't add twice diff --git a/deps/credentials_obfuscation/README.md b/deps/credentials_obfuscation/README.md index 71814d0cf706c03d5ed16cd5688bf1719f75cc25..80f4e3c9a1554396e2a8ab8e068eeec9ac58f820 100644 --- a/deps/credentials_obfuscation/README.md +++ b/deps/credentials_obfuscation/README.md @@ -10,6 +10,25 @@ the Erlang runtime (`error_logger`). Note that this application **cannot protect against heap dumping attacks** and only helps avoid sensitive data appearing in log files. +# Usage + +First, make the `credentials_obfuscation` application a dependency of your project. + +Then, during the start-up of your application, and after the `credentials_obfuscation` application starts, provide the secret value: + + +``` +CookieBin = atom_to_binary(erlang:get_cookie(), latin1)), +credentials_obfuscation:set_secret(CookieBin) +``` + +To use a random value, do the following: + +``` +Bytes = crypto:strong_rand_bytes(128), +credentials_obfuscation:set_secret(Bytes) +``` + ## License and Copyright See [LICENSE](./LICENSE). diff --git a/deps/credentials_obfuscation/include/credentials_obfuscation.hrl b/deps/credentials_obfuscation/include/credentials_obfuscation.hrl new file mode 100644 index 0000000000000000000000000000000000000000..e10071c20fcc4c1817107c48d2c5ed9e51aebcf1 --- /dev/null +++ b/deps/credentials_obfuscation/include/credentials_obfuscation.hrl @@ -0,0 +1 @@ +-define(PENDING_SECRET, '$pending-secret'). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation.app.src b/deps/credentials_obfuscation/src/credentials_obfuscation.app.src index 60a81019a0d43367542b6ff3386973543e4f8295..4f5726b7e6ad301bc224523ef645c610e6c84a80 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation.app.src +++ b/deps/credentials_obfuscation/src/credentials_obfuscation.app.src @@ -1,11 +1,11 @@ {application,credentials_obfuscation, [{description,"Helper library that obfuscates sensitive values in process state"}, - {vsn,"1.1.0"}, + {vsn,"2.0.0"}, {licenses,["MPL1.1","ASL2"]}, {links,[{"GitHub", "https://github.com/rabbitmq/credentials-obfuscation"}]}, {registered,[]}, {mod,{credentials_obfuscation_app,[]}}, {applications,[kernel,stdlib,crypto]}, - {env,[{ets_table_name,credentials_obfuscation},{enabled,true}]}, + {env,[{enabled,true}]}, {modules,[]}]}. diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation.erl b/deps/credentials_obfuscation/src/credentials_obfuscation.erl index f765af7aeb247ce458e74e3370ce5062ff1b6c65..02fa4dae6270db414e7fdf09f572e50c69949c32 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation.erl @@ -16,28 +16,48 @@ -module(credentials_obfuscation). --export([encrypt/1,decrypt/1]). +%% Configuration API +-export([enabled/0, cipher/0, hash/0, iterations/0, secret/0]). -encrypt(none) -> - none; +%% API +-export([set_secret/1, encrypt/1, decrypt/1, refresh_config/0]). + +-spec enabled() -> boolean(). +enabled() -> + credentials_obfuscation_svc:get_config(enabled). + +-spec cipher() -> atom(). +cipher() -> + credentials_obfuscation_svc:get_config(cipher). + +-spec hash() -> atom(). +hash() -> + credentials_obfuscation_svc:get_config(hash). + +-spec iterations() -> non_neg_integer(). +iterations() -> + credentials_obfuscation_svc:get_config(iterations). + +-spec secret() -> binary() | '$pending-secret'. +secret() -> + credentials_obfuscation_svc:get_config(secret). + +-spec set_secret(binary()) -> ok. +set_secret(Secret) when is_binary(Secret) -> + ok = credentials_obfuscation_svc:set_secret(Secret). + +-spec encrypt(term()) -> {plaintext, term()} | {encrypted, binary()}. +encrypt(none) -> none; +encrypt(undefined) -> undefined; encrypt(Term) -> - case credentials_obfuscation_app:enabled() of - true -> - credentials_obfuscation_pbe:encrypt( - credentials_obfuscation_app:cipher(), credentials_obfuscation_app:hash(), credentials_obfuscation_app:iterations(), - credentials_obfuscation_app:passphrase(), Term); - false -> - Term - end. - -decrypt(none) -> - none; -decrypt(Base64EncryptedBinary) -> - case credentials_obfuscation_app:enabled() of - true -> - credentials_obfuscation_pbe:decrypt( - credentials_obfuscation_app:cipher(), credentials_obfuscation_app:hash(), credentials_obfuscation_app:iterations(), - credentials_obfuscation_app:passphrase(), Base64EncryptedBinary); - false -> - Base64EncryptedBinary - end. \ No newline at end of file + credentials_obfuscation_svc:encrypt(Term). + +-spec decrypt({plaintext, term()} | {encrypted, binary()}) -> term(). +decrypt(none) -> none; +decrypt(undefined) -> undefined; +decrypt(Term) -> + credentials_obfuscation_svc:decrypt(Term). + +-spec refresh_config() -> ok. +refresh_config() -> + credentials_obfuscation_svc:refresh_config(). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl index 797051b92960097b63160cb70c496ef9e1d87c29..ad0822c0680446b29c31fa76a2273bd242074990 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl @@ -20,50 +20,10 @@ -export([start/2, stop/1]). -%% Dummy supervisor - see Ulf Wiger's comment at -%% http://erlang.2086793.n4.nabble.com/initializing-library-applications-without-processes-td2094473.html --behaviour(supervisor). --export([init/1]). - --export([enabled/0, passphrase/0, cipher/0, hash/0, iterations/0]). - +-spec start(_,_) -> {'error', _} | {'ok', pid()} | {'ok', pid(), _}. start(_StartType, _StartArgs) -> - _ = case enabled() of - true -> - T = ets:new(table_name(), [set, protected, named_table]), - ets:insert_new(T, {secret, crypto:strong_rand_bytes(128)}), - %% cipher/decipher attempt to crash now instead of at some awkward moment - check(); - false -> - ok - end, - supervisor:start_link({local, ?MODULE}, ?MODULE, []). - -check() -> - Value = <<"dummy">>, - Encrypted = credentials_obfuscation:encrypt(Value), - Value = credentials_obfuscation:decrypt(Encrypted). + credentials_obfuscation_sup:start_link(). +-spec stop(_) -> 'ok'. stop(_State) -> ok. - -init([]) -> {ok, {{one_for_one, 1, 5}, []}}. - -enabled() -> - application:get_env(credentials_obfuscation, enabled, true). - -passphrase() -> - [{secret, PassPhrase}] = ets:lookup(table_name(), secret), - PassPhrase. - -table_name() -> - application:get_env(credentials_obfuscation, ets_table_name, credentials_obfuscation). - -cipher() -> - application:get_env(credentials_obfuscation, cipher, credentials_obfuscation_pbe:default_cipher()). - -hash() -> - application:get_env(credentials_obfuscation, hash, credentials_obfuscation_pbe:default_hash()). - -iterations() -> - application:get_env(credentials_obfuscation, iterations, credentials_obfuscation_pbe:default_iterations()). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl index d2c5b27ed5e7326deda8193b0b8111b485d8df7f..1fc94ed1c0b097e3cc34d5b1b1d93195a68549bc 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl @@ -16,6 +16,8 @@ -module(credentials_obfuscation_pbe). +-include("credentials_obfuscation.hrl"). + -export([supported_ciphers/0, supported_hashes/0, default_cipher/0, default_hash/0, default_iterations/0]). -export([encrypt_term/5, decrypt_term/5]). -export([encrypt/5, decrypt/5]). @@ -84,14 +86,18 @@ default_iterations() -> %% Encryption/decryption of arbitrary Erlang terms. -encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term) -> - encrypt(Cipher, Hash, Iterations, PassPhrase, term_to_binary(Term)). +encrypt_term(_Cipher, _Hash, _Iterations, ?PENDING_SECRET, Term) -> + {plaintext, Term}; +encrypt_term(Cipher, Hash, Iterations, Secret, Term) -> + encrypt(Cipher, Hash, Iterations, Secret, term_to_binary(Term)). -decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - binary_to_term(decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary)). +decrypt_term(_Cipher, _Hash, _Iterations, _Secret, {plaintext, Term}) -> + Term; +decrypt_term(Cipher, Hash, Iterations, Secret, Base64Binary) -> + binary_to_term(decrypt(Cipher, Hash, Iterations, Secret, Base64Binary)). %% The cipher for encryption is from the list of supported ciphers. -%% The hash for generating the key from the passphrase is from the list +%% The hash for generating the key from the secret is from the list %% of supported hashes. See crypto:supports/0 to obtain both lists. %% The key is generated by applying the hash N times with N >= 1. %% @@ -99,26 +105,31 @@ decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> %% function accepts that same base64 binary. -spec encrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText) -> + pos_integer(), iodata(), binary()) -> {plaintext, binary()} | {encrypted, binary()}. +encrypt(_Cipher, _Hash, _Iterations, ?PENDING_SECRET, ClearText) -> + {plaintext, ClearText}; +encrypt(Cipher, Hash, Iterations, Secret, ClearText) when is_binary(ClearText) -> Salt = crypto:strong_rand_bytes(16), Ivec = crypto:strong_rand_bytes(iv_length(Cipher)), - Key = make_key(Cipher, Hash, Iterations, PassPhrase, Salt), + Key = make_key(Cipher, Hash, Iterations, Secret, Salt), Binary = crypto:block_encrypt(Cipher, Key, Ivec, pad(Cipher, ClearText)), - base64:encode(<< Salt/binary, Ivec/binary, Binary/binary >>). + Encrypted = base64:encode(<>), + {encrypted, Encrypted}. -spec decrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> + pos_integer(), iodata(), {'encrypted', binary() | [1..255]} | {'plaintext', _}) -> any(). +decrypt(_Cipher, _Hash, _Iterations, _Secret, {plaintext, ClearText}) -> + ClearText; +decrypt(Cipher, Hash, Iterations, Secret, {encrypted, Base64Binary}) -> IvLength = iv_length(Cipher), << Salt:16/binary, Ivec:IvLength/binary, Binary/bits >> = base64:decode(Base64Binary), - Key = make_key(Cipher, Hash, Iterations, PassPhrase, Salt), + Key = make_key(Cipher, Hash, Iterations, Secret, Salt), unpad(crypto:block_decrypt(Cipher, Key, Ivec, Binary)). -%% Generate a key from a passphrase. +%% Generate a key from a secret. -make_key(Cipher, Hash, Iterations, PassPhrase, Salt) -> - Key = pbdkdf2(PassPhrase, Salt, Iterations, key_length(Cipher), +make_key(Cipher, Hash, Iterations, Secret, Salt) -> + Key = pbdkdf2(Secret, Salt, Iterations, key_length(Cipher), fun crypto:hmac/4, Hash, hash_length(Hash)), if Cipher =:= des3_cbc; Cipher =:= des3_cbf; Cipher =:= des3_cfb; diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..10d2800d535c28b68fd5761b1f6da81731657127 --- /dev/null +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl @@ -0,0 +1,49 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019 Pivotal Software, Inc. All rights reserved. +%% + +-module(credentials_obfuscation_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%% =================================================================== +%% API functions +%% =================================================================== + +-spec start_link() -> 'ignore' | {'error', _} | {'ok', pid()}. +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%% =================================================================== +%% Supervisor callbacks +%% =================================================================== + +init([]) -> + SupFlags = #{ + strategy => one_for_one, + intensity => 1, + period => 5 + }, + ChildSpec = #{ + id => credentials_obfuscaton_svc, + start => {credentials_obfuscation_svc, start_link, []} + }, + {ok, {SupFlags, [ChildSpec]}}. diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl new file mode 100644 index 0000000000000000000000000000000000000000..f8e61b3c0d98ccdfd98344f93291cd199a382bd0 --- /dev/null +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl @@ -0,0 +1,160 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019 Pivotal Software, Inc. All rights reserved. +%% + +-module(credentials_obfuscation_svc). + +-behaviour(gen_server). + +-include("credentials_obfuscation.hrl"). + +%% API functions +-export([start_link/0, + get_config/1, + refresh_config/0, + set_secret/1, + encrypt/1, + decrypt/1]). + +%% gen_server callbacks +-export([init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + terminate/2, + code_change/3]). + +-record(state, {enabled :: boolean(), + cipher :: atom(), + hash :: atom(), + iterations :: non_neg_integer(), + secret :: binary() | '$pending-secret'}). + +%%%=================================================================== +%%% API functions +%%%=================================================================== + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +-spec get_config(atom()) -> term(). +get_config(Config) -> + gen_server:call(?MODULE, {get_config, Config}). + +-spec refresh_config() -> ok. +refresh_config() -> + gen_server:call(?MODULE, refresh_config). + +-spec set_secret(binary()) -> ok. +set_secret(Secret) when is_binary(Secret) -> + gen_server:call(?MODULE, {set_secret, Secret}). + +-spec encrypt(term()) -> {plaintext, term()} | {encrypted, binary()}. +encrypt(Term) -> + gen_server:call(?MODULE, {encrypt, Term}). + +-spec decrypt({plaintext, term()} | {encrypted, binary()}) -> term(). +decrypt(Term) -> + gen_server:call(?MODULE, {decrypt, Term}). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +init([]) -> + init_state(). + +handle_call({get_config, enabled}, _From, #state{enabled=Enabled}=State) -> + {reply, Enabled, State}; +handle_call({get_config, cipher}, _From, #state{cipher=Cipher}=State) -> + {reply, Cipher, State}; +handle_call({get_config, hash}, _From, #state{hash=Hash}=State) -> + {reply, Hash, State}; +handle_call({get_config, iterations}, _From, #state{iterations=Iterations}=State) -> + {reply, Iterations, State}; +handle_call({get_config, secret}, _From, #state{secret=Secret}=State) -> + {reply, Secret, State}; +handle_call(refresh_config, _From, State0) -> + {ok, State1} = refresh_config(State0), + {reply, ok, State1}; +handle_call({encrypt, Term}, _From, #state{enabled=false}=State) -> + {reply, Term, State}; +handle_call({encrypt, Term}, _From, #state{cipher=Cipher, + hash=Hash, + iterations=Iterations, + secret=Secret}=State) -> + Encrypted = credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, Secret, Term), + {reply, Encrypted, State}; +handle_call({decrypt, Term}, _From, #state{enabled=false}=State) -> + {reply, Term, State}; +handle_call({decrypt, Term}, _From, #state{cipher=Cipher, + hash=Hash, + iterations=Iterations, + secret=Secret}=State) -> + Decrypted = credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, Secret, Term), + {reply, Decrypted, State}; +handle_call({set_secret, Secret}, _From, State0) -> + State1 = State0#state{secret = Secret}, + {reply, ok, State1}. + +handle_cast(_Message, State) -> + {noreply, State}. + +handle_info(_Message, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + + +-spec init_state() -> {'ok', #state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::pos_integer(), secret::'$pending-secret'}}. +init_state() -> + {ok, Enabled, Cipher, Hash, Iterations} = get_config_values(), + ok = check(Cipher, Hash, Iterations), + State = #state{enabled = Enabled, cipher = Cipher, hash = Hash, + iterations = Iterations, secret = ?PENDING_SECRET}, + {ok, State}. + +-spec refresh_config(#state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::non_neg_integer(), secret::'$pending-secret' | binary()}) -> + {'ok', #state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::non_neg_integer(), secret::'$pending-secret' | binary()}}. +refresh_config(#state{secret=Secret}=State0) -> + {ok, Enabled, Cipher, Hash, Iterations} = get_config_values(), + ok = case Enabled of + true -> check(Cipher, Hash, Iterations); + false -> ok + end, + State1 = State0#state{enabled = Enabled, cipher = Cipher, hash = Hash, + iterations = Iterations, secret = Secret}, + {ok, State1}. + +get_config_values() -> + Enabled = application:get_env(credentials_obfuscation, enabled, true), + Cipher = application:get_env(credentials_obfuscation, cipher, + credentials_obfuscation_pbe:default_cipher()), + Hash = application:get_env(credentials_obfuscation, hash, + credentials_obfuscation_pbe:default_hash()), + Iterations = application:get_env(credentials_obfuscation, iterations, + credentials_obfuscation_pbe:default_iterations()), + {ok, Enabled, Cipher, Hash, Iterations}. + +check(Cipher, Hash, Iterations) -> + Value = <<"dummy">>, + TempSecret = crypto:strong_rand_bytes(128), + E = credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, TempSecret, Value), + Value = credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, TempSecret, E), + ok. diff --git a/deps/cuttlefish/Makefile b/deps/cuttlefish/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..49eae6fda0613a00ddaf0dd6767712bda3453bcf --- /dev/null +++ b/deps/cuttlefish/Makefile @@ -0,0 +1,26 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += +'{parse_transform, lager_transform}' + +DEPS += getopt +dep_getopt = hex 1.0.1 getopt +DEPS += lager +dep_lager = hex 3.7.0 lager + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/cuttlefish/README.md b/deps/cuttlefish/README.md new file mode 100644 index 0000000000000000000000000000000000000000..eba4a9ecee2859f930453962eb3cbf45d6d0ac99 --- /dev/null +++ b/deps/cuttlefish/README.md @@ -0,0 +1,104 @@ +# Cuttlefish + +[![Build Status](https://travis-ci.org/Kyorai/cuttlefish.svg?branch=develop)](https://travis-ci.org/Kyorai/cuttlefish) +[![Coverage Status](https://coveralls.io/repos/github/Kyorai/cuttlefish/badge.svg?branch=master)](https://coveralls.io/github/Kyorai/cuttlefish) +[![Hex version](https://img.shields.io/hexpm/v/cuttlefish.svg "Hex version")](https://hex.pm/packages/cuttlefish) + +Cuttlefish is a library for Erlang applications that wish to walk the +fine line between Erlang `app.config`s and a sysctl-like syntax. +The name is a pun on the pronunciation of 'sysctl' and jokes are +better explained. + +This repository retains full history of the original repository, [basho/cuttlefish/](https://github.com/basho/cuttlefish/), +but intentionally cut ties with that repo to avoid confusion as to +where is the most up-to-date, maintained version is. + +This is the repository used to produce [Hex.pm releases](https://hex.pm/packages/cuttlefish) of the project. + +## Riak Disclaimer + +While this readme and test suite is Riak-heavy, the fact is that this +library can be used with any Erlang application that wants a more +universally accessible configuration syntax. Still, I built this for +Riak, and it's nice to have a concrete example to work with. + +## The Vision + +Currently, Riak's `app.config` is **the** definitive place for +configuring Riak. It's not odd for Erlang applications to be +configured this way, but it is a struggle for non-Erlang programmers +and automated deployment tools to manipulate these files. On the other +hand, the `app.config` is a useful construct for Erlang programmers, +and it is pretty coupled to OTP applications. + +Cuttlefish's goal is to put a layer of abstraction on top of the +`app.config` that is easier to work with outside of the Erlang world. +It will allow Erlang programmers to write a schema for their +application's configuration file, which is independent of the +applications included in the project. The schema is one of the more +important parts of Cuttlefish, so we'll go into more detail on it +below, but it is written in Erlang and defines how the non-Erlang +configuration file works. + +From this schema, you can generate a default `.conf` file for your +application. This will be the file that is packaged with your +application as the default configuration. + +The schema is also used to generate an `app.config` that will be used +to start your application. Using the schema alone will generate all +the proper defaults. Your users can make changes to the `.conf` file +and those changes will overwrite the schema's defaults. + +You an also have an `advanced.config` which looks like the old +`app.config` for anything that no schema mapping is created for. + +What does this look like for an application like Riak? + +Well, the authors of Riak maintain a schema for Riak's config. It +defines all sorts of things we'll get into later. When we build Riak, +Cuttlefish generates a `riak.conf` file that contains the default +shipping configuration of Riak. When a script to start Riak is run, a +Cuttlefish escript is spun up, reads the `riak.conf` file and combines +that with the Schema to generate an `app.config`. The script then +exits, and a new Erlang VM (destined to run Riak) is started with that +generated `app.config`. Down the line somewhere, you may be +troubleshooting some part of Riak, and the support organization at +Basho may need you to manipulate a configuration setting that is not +exposed by the schema because it is so infrequently used. In that +case, we can set that setting directly in an `advanced.config` which +sits in the same directory as `riak.conf`. + +I hope that gives you a good idea about how this works at a high +level. + +## What's it look like to Erlang Developers? + +You can learn more about the technical implementation of schemas at: +https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Erlang-Developers + +## What's it look like to users? + +Riak uses the semantic of `$conf_dir/app.config` for configuration. +We're going to replace that with a file called `riak.conf`, with a +syntax that looks like this: + +```ini +ring_size = 32 +anti_entropy = debug +log.error.file = /var/log/error.log +log.console.file = /var/log/console.log +log.syslog = on +``` + +More information for users here: +https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Application-Users + +## What's it look like to application packagers? + +* [node_package](https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-node_package-users) +* [non node_package](https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-non-node_package-users) + + +## Current Status + +Cuttlefish is ready for production deployments. diff --git a/deps/cuttlefish/priv/erlang_vm.schema b/deps/cuttlefish/priv/erlang_vm.schema new file mode 100644 index 0000000000000000000000000000000000000000..287ef912b7eba9af2a2f01b4b3e85b5288684364 --- /dev/null +++ b/deps/cuttlefish/priv/erlang_vm.schema @@ -0,0 +1,351 @@ +%%-*- mode: erlang -*- + +%% @doc Starts the Erlang runtime system with SMP support +%% enabled. This may fail if no runtime system with SMP support is +%% available. The 'auto' setting starts the Erlang runtime system with +%% SMP support enabled if it is available and more than one logical +%% processor are detected. -smp disable starts a runtime system +%% without SMP support. +%% +%% NOTE: The runtime system with SMP support will not be available on +%% all supported platforms. See also the erlang.schedulers settings. +%% +%% NOTE: Some native extensions (NIFs) require use of the SMP +%% emulator. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.smp", "vm_args.-smp", [ + {default, enable}, + {datatype, {enum, [enable, auto, disable]}}, + hidden +]}. + +%% @doc Sets the mapping of warning messages for error_logger. +%% Messages sent to the error logger using one of the warning +%% routines can be mapped either to errors (default), warnings +%% (w - default), or info reports (i). +{mapping, "erlang.W", "vm_args.+W", [ + {default, "w"}, + hidden +]}. + +%% @doc Sets the number of scheduler threads to create and scheduler +%% threads to set online when erlang.smp support has been enabled. The +%% maximum for both values is 1024. If the Erlang runtime system is +%% able to determine the amount of logical processors configured and +%% logical processors available, schedulers.total will default to +%% logical processors configured, and schedulers.online will default +%% to logical processors available; otherwise, the default values will +%% be 1. Schedulers may be omitted if schedulers.online is not and +%% vice versa. +%% +%% If schedulers.total or schedulers.online is specified as a negative +%% number, the value is subtracted from the default number of logical +%% processors configured or logical processors available, +%% respectively. +%% +%% Specifying the value 0 for Schedulers or SchedulersOnline resets +%% the number of scheduler threads or scheduler threads online +%% respectively to its default value. +%% +%% This option is ignored if the emulator doesn't have SMP support +%% enabled (see the erlang.smp flag). +%% +%% More information at: http://erlang.org/doc/man/erl.html +%% +S Schedulers:SchedulerOnline +{mapping, "erlang.schedulers.total", "vm_args.+S", [ + {default, undefined}, + {datatype, integer}, + {validators, ["=<1024"]} +]}. + +%% @see erlang.schedulers.total +{mapping, "erlang.schedulers.online", "vm_args.+S", [ + {default, undefined}, + {datatype, integer}, + {validators, ["=<1024"]} +]}. + +{translation, "vm_args.+S", + fun(Conf) -> + Total = cuttlefish:conf_get("erlang.schedulers.total", Conf, undefined), + Online = cuttlefish:conf_get("erlang.schedulers.online", Conf, undefined), + case {Total, Online} of + {undefined, undefined} -> cuttlefish:unset(); + {undefined, O} -> ":" ++ integer_to_list(O); + {T, undefined} -> integer_to_list(T); + _ -> integer_to_list(Total) ++ ":" ++ integer_to_list(Online) + end + end +}. + +{validator, "=<1024", "has a maximum value of 1024", + fun(X) -> X =< 1024 end}. + +%% @doc Enables or disables the kernel poll functionality if the +%% emulator supports it. If the emulator does not support kernel poll, +%% and the K flag is passed to the emulator, a warning is issued at +%% startup. +%% +%% Similar information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.K", "vm_args.+K", [ + {default, on}, + {datatype, flag}, + hidden +]}. + +%%%% Tunables +%% @doc Name of the Erlang node +{mapping, "nodename", "vm_args.-name", [ + {default, "{{node}}"} +]}. + +%% @doc Cookie for distributed node communication. All nodes in the +%% same cluster should use the same cookie or they will not be able to +%% communicate. +{mapping, "distributed_cookie", "vm_args.-setcookie", [ + {default, "erlang"} +]}. + +%% @doc Sets the number of threads in async thread pool, valid range +%% is 0-1024. If thread support is available, the default is 64. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.async_threads", "vm_args.+A", [ + {default, 64}, + {datatype, integer}, + {validators, ["range:0-1024"]} +]}. + +{validator, "range:0-1024", "must be 0 to 1024", + fun(X) -> X >= 0 andalso X =< 1024 end}. + +%% @doc Suggested stack size, in bytes, for threads in the +%% async-thread pool. Valid range is 16-8192 kilowords. The default +%% suggested stack size is 16 kilowords, i.e, 64 kilobyte on 32-bit +%% architectures. This small default size has been chosen since the +%% amount of async-threads might be quite large. The default size is +%% enough for drivers delivered with Erlang/OTP, but might not be +%% sufficiently large for other dynamically linked in drivers that use +%% the driver_async() functionality. Note that the value passed is +%% only a suggestion, and it might even be ignored on some platforms. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.async_threads.stack_size", "vm_args.+a", [ + {datatype, bytesize}, + {validators, [ "stack-size-divisible", "stack-size-range"]}, + hidden +]}. + +{validator, "stack-size-divisible", ("must be divisible by " ++ integer_to_list(erlang:system_info({wordsize,external}))), + fun(X) -> X rem (erlang:system_info({wordsize, external})) == 0 end}. + +{validator, "stack-size-range", + begin + WordSize = erlang:system_info({wordsize, external}), + ("must be in the range of " ++ cuttlefish_bytesize:to_string(16 * 1024 * WordSize) + ++ " to " ++ cuttlefish_bytesize:to_string(8192 * 1024 * WordSize)) + end, + fun(X) -> + Scaled = X div (1024 * erlang:system_info({wordsize, external})), + Scaled =< 8192 andalso Scaled >= 16 + end}. + +{translation, "vm_args.+a", + fun(Conf) -> + RawValue = cuttlefish:conf_get("erlang.async_threads.stack_size", Conf), + RawValue div (1024 * erlang:system_info({wordsize, external})) + end}. + +%% Note: OTP R15 and earlier uses -env ERL_MAX_PORTS, R16+ uses +Q +%% @doc The number of concurrent ports/sockets +%% Valid range is 1024-134217727 +{mapping, "erlang.max_ports", + cuttlefish:otp("R16", "vm_args.+Q", "vm_args.-env ERL_MAX_PORTS"), [ + {default, 262144}, + {datatype, integer}, + {validators, ["range4ports"]} +]}. + +{validator, "range4ports", "must be 1024 to 134217727", + fun(X) -> X >= 1024 andalso X =< 134217727 end}. + +%% @doc A non-negative integer which indicates how many times +%% generational garbage collections can be done without forcing a +%% fullsweep collection. In low-memory systems (especially without +%% virtual memory), setting the value to 0 can help to conserve +%% memory. +%% +%% More information at: +%% http://www.erlang.org/doc/man/erlang.html#system_flag-2 +{mapping, "erlang.fullsweep_after", "vm_args.-env ERL_FULLSWEEP_AFTER", [ + {default, 0}, + {datatype, integer}, + hidden, + {validators, ["positive_integer"]} +]}. + +{validator, "positive_integer", "must be a positive integer", + fun(X) -> X >= 0 end}. + +%% @doc Set the location of crash dumps +{mapping, "erlang.crash_dump", "vm_args.-env ERL_CRASH_DUMP", [ + {default, "{{crash_dump}}"}, + {datatype, file}, + hidden +]}. + +%% Note: OTP R15 and earlier uses -env ERL_MAX_ETS_TABLES, +%% R16+ uses +e +%% @doc Raise the ETS table limit +{mapping, "erlang.max_ets_tables", + cuttlefish:otp("R16", "vm_args.+e", "vm_args.-env ERL_MAX_ETS_TABLES"), [ + {default, 256000}, + {datatype, integer}, + hidden +]}. + +%% @doc Raise the default erlang process limit +{mapping, "erlang.process_limit", "vm_args.+P", [ + {datatype, integer}, + {default, 256000}, + hidden +]}. + +%% @doc For nodes with many busy_dist_port events, Basho recommends +%% raising the sender-side network distribution buffer size. +%% 32MB may not be sufficient for some workloads and is a suggested +%% starting point. Erlangers may know this as +zdbbl. +%% The Erlang/OTP default is 1024 (1 megabyte). +%% See: http://www.erlang.org/doc/man/erl.html#%2bzdbbl +{mapping, "erlang.distribution_buffer_size", "vm_args.+zdbbl", [ + {datatype, bytesize}, + {commented, "32MB"}, + hidden, + {validators, ["zdbbl_range"]} +]}. + +{translation, "vm_args.+zdbbl", + fun(Conf) -> + ZDBBL = cuttlefish:conf_get("erlang.distribution_buffer_size", Conf, undefined), + case ZDBBL of + undefined -> undefined; + X when is_integer(X) -> cuttlefish_util:ceiling(X / 1024); %% Bytes to Kilobytes; + _ -> undefined + end + end +}. + +{validator, "zdbbl_range", "must be between 1KB and 2097151KB", + fun(ZDBBL) -> + %% 2097151KB = 2147482624 + ZDBBL >= 1024 andalso ZDBBL =< 2147482624 + end +}. + +%% @doc Set scheduler forced wakeup interval. All run queues will be +%% scanned each Interval milliseconds. While there are sleeping +%% schedulers in the system, one scheduler will be woken for each +%% non-empty run queue found. An Interval of zero disables this +%% feature, which also is the default. +%% +%% This feature is a workaround for lengthy executing native code, and +%% native code that do not bump reductions properly. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+sfwi +{mapping, "erlang.schedulers.force_wakeup_interval", "vm_args.+sfwi", [ + {commented, 500}, + {datatype, integer} +]}. + +%% @doc Enable or disable scheduler compaction of load. By default +%% scheduler compaction of load is enabled. When enabled, load +%% balancing will strive for a load distribution which causes as many +%% scheduler threads as possible to be fully loaded (i.e., not run out +%% of work). This is accomplished by migrating load (e.g. runnable +%% processes) into a smaller set of schedulers when schedulers +%% frequently run out of work. When disabled, the frequency with which +%% schedulers run out of work will not be taken into account by the +%% load balancing logic. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+scl +{mapping, "erlang.schedulers.compaction_of_load", "vm_args.+scl", [ + {commented, "false"}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc Enable or disable scheduler utilization balancing of load. By +%% default scheduler utilization balancing is disabled and instead +%% scheduler compaction of load is enabled which will strive for a +%% load distribution which causes as many scheduler threads as +%% possible to be fully loaded (i.e., not run out of work). When +%% scheduler utilization balancing is enabled the system will instead +%% try to balance scheduler utilization between schedulers. That is, +%% strive for equal scheduler utilization on all schedulers. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+sub +{mapping, "erlang.schedulers.utilization_balancing", "vm_args.+sub", [ + {commented, "true"}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc For ease of firewall configuration, the Erlang distribution +%% can be bound to a limited range of TCP ports. If this is set, and +%% erlang.distribution.port_range.maximum is *unset*, only this port +%% will be used. If the minimum is *unset*, no restriction will be +%% made on the port range; instead Erlang will listen on a random +%% high-numbered port. +%% +%% More information: http://www.erlang.org/faq/how_do_i.html#id55090 +%% http://www.erlang.org/doc/man/kernel_app.html +{mapping, "erlang.distribution.port_range.minimum", "kernel.inet_dist_listen_min", [ + {commented, 6000}, + {datatype, integer}, + hidden +]}. + +%% @see erlang.distribution.port_range.minimum +{mapping, "erlang.distribution.port_range.maximum", "kernel.inet_dist_listen_max", [ + {commented, 7999}, + {datatype, integer}, + hidden +]}. + +%% @doc Set the interface/IP to listen for distributed Erlang connections. +%% +%% More information: http://erlang.org/doc/man/kernel_app.html +{mapping, "erlang.distribution.interface", "kernel.inet_dist_use_interface", [ + {commented, "true"}, + {datatype, string}, + {validators, ["ip_strict"]}, + hidden +]}. + +{translation, "kernel.inet_dist_use_interface", + fun(Conf) -> + IPStr = cuttlefish:conf_get("erlang.distribution.interface", Conf), + {ok, IP_address} = inet:parse_strict_address(IPStr), + IP_address + end +}. + +{validator, "ip_strict", "must be a valid IPv4 or IPv6 address", +fun(String) -> + try inet:parse_strict_address(String) of + {ok,{_,_,_,_}} -> true; + {ok,{_,_,_,_,_,_,_,_}} -> true; + _ -> false + catch _:_ -> + false + end +end}. + +%% @doc Set the net_kernel's net_ticktime. +%% +%% More information: http://www.erlang.org/doc/man/kernel_app.html#net_ticktime +%% and http://www.erlang.org/doc/man/net_kernel.html#set_net_ticktime-1 +{mapping, "erlang.distribution.net_ticktime", "vm_args.-kernel net_ticktime", [ + {commented, 60}, + {datatype, integer}, + hidden +]}. diff --git a/deps/cuttlefish/rebar.config b/deps/cuttlefish/rebar.config new file mode 100644 index 0000000000000000000000000000000000000000..ddd41ffa3b17f4a2e6b63ba53d149c28b0092baa --- /dev/null +++ b/deps/cuttlefish/rebar.config @@ -0,0 +1,23 @@ +{minimum_otp_vsn, "R16"}. + +{erl_opts, [warnings_as_errors, + {parse_transform, lager_transform}, + debug_info, + warn_untyped_record]}. + +{deps, [getopt, {lager, "~>3.7.0"}]}. + +{escript_emu_args, "%%! -escript main cuttlefish_escript +S 1 +A 0\n"}. +{escript_incl_apps, [goldrush, getopt, lager, cuttlefish]}. +{escript_main_app, cuttlefish}. + +{provider_hooks, [{post, [{compile, {default, escriptize}}]}]}. + +{eunit_opts, [verbose]}. +{cover_enabled, true}. +{cover_print_enabled, true}. +{cover_export_enabled, true}. + +{profiles, [{dev, [{deps, [neotoma]}, + {plugins, [rebar3_neotoma_plugin]}]}, + {test, [{deps, [bbmustache]}]}]}. diff --git a/deps/cuttlefish/rebar.config.script b/deps/cuttlefish/rebar.config.script new file mode 100644 index 0000000000000000000000000000000000000000..20a57a8be5d7e42f220fab2e7619d09a676d6b58 --- /dev/null +++ b/deps/cuttlefish/rebar.config.script @@ -0,0 +1,15 @@ +%% vim:ft=erlang: + +case os:getenv("TRAVIS_JOB_ID") of + false -> CONFIG; + JobId -> + %% coveralls.io. + [{plugins, [{coveralls, + {git, "https://github.com/markusn/coveralls-erl", + {branch, "master"}}}]} + ,{coveralls_coverdata, "_build/test/cover/eunit.coverdata"} + ,{coveralls_service_name, "travis-ci"} + ,{coveralls_service_job_id, JobId} + |CONFIG + ] +end. diff --git a/deps/cuttlefish/rebar.lock b/deps/cuttlefish/rebar.lock new file mode 100644 index 0000000000000000000000000000000000000000..d5a5db0c9f22f944f35183a71cb8b3770e647475 --- /dev/null +++ b/deps/cuttlefish/rebar.lock @@ -0,0 +1,10 @@ +{"1.1.0", +[{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}, + {<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1}, + {<<"lager">>,{pkg,<<"lager">>,<<"3.7.0">>},0}]}. +[ +{pkg_hash,[ + {<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}, + {<<"goldrush">>, <<"F06E5D5F1277DA5C413E84D5A2924174182FB108DABB39D5EC548B27424CD106">>}, + {<<"lager">>, <<"563AB17CD32134A3DD17EC3B3622E6D8F827506AA4F8C489158879BED87D980B">>}]} +]. diff --git a/deps/cuttlefish/src/conf_parse.erl b/deps/cuttlefish/src/conf_parse.erl new file mode 100644 index 0000000000000000000000000000000000000000..ad6f6c39160a7242e4cd8e9bc6475ee3d27bfc1b --- /dev/null +++ b/deps/cuttlefish/src/conf_parse.erl @@ -0,0 +1,435 @@ +-module(conf_parse). +-export([parse/1,file/1]). +-define(p_anything,true). +-define(p_charclass,true). +-define(p_choose,true). +-define(p_label,true). +-define(p_not,true). +-define(p_one_or_more,true). +-define(p_optional,true). +-define(p_scan,true). +-define(p_seq,true). +-define(p_string,true). +-define(p_zero_or_more,true). + + + + +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +%% This module implements the parser for a sysctl-style +%% configuration format. Example: +%% +%% ``` +%% riak.local.node = riak@127.0.0.1 +%% riak.local.http = 127.0.0.1:8098 +%% riak.local.pb = 127.0.0.1:8087 +%% riak.local.storage.backend = bitcask''' +%% +%% This would parse into the following flat proplist: +%% +%% ``` +%% [{<<"riak.local.node">>,<<"riak@127.0.0.1">>}, +%% {<<"riak.local.http">>,<<"127.0.0.1:8098">>}, +%% {<<"riak.local.pb">>,<<"127.0.0.1:8087">>}, +%% {<<"riak.local.storage.backend">>,<<"bitcask">>}]''' +%% +%% Other modules in this application interpret and validate the +%% result of a successful parse. +%% @end +-define(line, true). +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc Only let through lines that are not comments or whitespace. +is_setting(ws) -> false; +is_setting(comment) -> false; +is_setting(_) -> true. + +%% @doc Removes escaped dots from keys +unescape_dots([$\\,$.|Rest]) -> + [$.|unescape_dots(Rest)]; +unescape_dots([]) -> []; +unescape_dots([C|Rest]) -> + [C|unescape_dots(Rest)]. + +-ifdef(TEST). +file_test() -> + Conf = conf_parse:file("test/riak.conf"), + ?assertEqual([ + {["ring_size"],"32"}, + {["anti_entropy"],"debug"}, + {["log","error","file"],"/var/log/error.log"}, + {["log","console","file"],"/var/log/console.log"}, + {["log","syslog"],"on"}, + {["listener","http","internal"],"127.0.0.1:8098"}, + {["listener","http","external"],"10.0.0.1:80"} + ], Conf), + ok. + +utf8_test() -> + Conf = conf_parse:parse("setting = thingŒ\n"), + ?assertEqual([{["setting"], + {error, {conf_to_latin1, 1}} + }], Conf), + ok. +-endif. + +-spec file(file:name()) -> any(). +file(Filename) -> + AbsFilename = filename:absname(Filename), + case erl_prim_loader:get_file(AbsFilename) of + {ok, Bin, _} -> parse(Bin); + error -> {error, undefined} + end. + +-spec parse(binary() | list()) -> any(). +parse(List) when is_list(List) -> parse(unicode:characters_to_binary(List)); +parse(Input) when is_binary(Input) -> + _ = setup_memo(), + Result = case 'config'(Input,{{line,1},{column,1}}) of + {AST, <<>>, _Index} -> AST; + Any -> Any + end, + release_memo(), Result. + +-spec 'config'(input(), index()) -> parse_result(). +'config'(Input, Index) -> + p(Input, Index, 'config', fun(I,D) -> (p_zero_or_more(fun 'line'/2))(I,D) end, fun(Node, _Idx) -> + [ L || L <- Node, is_setting(L) ] + end). + +-spec 'line'(input(), index()) -> parse_result(). +'line'(Input, Index) -> + p(Input, Index, 'line', fun(I,D) -> (p_choose([p_seq([p_choose([fun 'setting'/2, fun 'comment'/2, p_one_or_more(fun 'ws'/2)]), p_choose([fun 'crlf'/2, fun 'eof'/2])]), fun 'crlf'/2]))(I,D) end, fun(Node, _Idx) -> + case Node of + [ Line, _EOL ] -> Line; + Line -> Line + end + end). + +-spec 'setting'(input(), index()) -> parse_result(). +'setting'(Input, Index) -> + p(Input, Index, 'setting', fun(I,D) -> (p_seq([p_zero_or_more(fun 'ws'/2), fun 'key'/2, p_zero_or_more(fun 'ws'/2), p_string(<<"=">>), p_zero_or_more(fun 'ws'/2), fun 'value'/2, p_zero_or_more(fun 'ws'/2), p_optional(fun 'comment'/2)]))(I,D) end, fun(Node, _Idx) -> + [ _, Key, _, _Eq, _, Value, _, _ ] = Node, + {Key, Value} + end). + +-spec 'key'(input(), index()) -> parse_result(). +'key'(Input, Index) -> + p(Input, Index, 'key', fun(I,D) -> (p_seq([p_label('head', fun 'word'/2), p_label('tail', p_zero_or_more(p_seq([p_string(<<".">>), fun 'word'/2])))]))(I,D) end, fun(Node, _Idx) -> + [{head, H}, {tail, T}] = Node, + [unicode:characters_to_list(H)| [ unicode:characters_to_list(W) || [_, W] <- T]] + end). + +-spec 'value'(input(), index()) -> parse_result(). +'value'(Input, Index) -> + p(Input, Index, 'value', fun(I,D) -> (p_one_or_more(p_seq([p_not(p_choose([p_seq([p_zero_or_more(fun 'ws'/2), fun 'crlf'/2]), fun 'comment'/2])), p_anything()])))(I,D) end, fun(Node, Idx) -> + case unicode:characters_to_binary(Node, utf8, latin1) of + {_Status, _Begining, _Rest} -> + {error, {conf_to_latin1, line(Idx)}}; + Bin -> + binary_to_list(Bin) + end + end). + +-spec 'comment'(input(), index()) -> parse_result(). +'comment'(Input, Index) -> + p(Input, Index, 'comment', fun(I,D) -> (p_seq([p_zero_or_more(fun 'ws'/2), p_string(<<"#">>), p_zero_or_more(p_seq([p_not(fun 'crlf'/2), p_anything()]))]))(I,D) end, fun(_Node, _Idx) ->comment end). + +-spec 'word'(input(), index()) -> parse_result(). +'word'(Input, Index) -> + p(Input, Index, 'word', fun(I,D) -> (p_one_or_more(p_choose([p_string(<<"\\.">>), p_charclass(<<"[A-Za-z0-9_-]">>)])))(I,D) end, fun(Node, _Idx) -> + unescape_dots(unicode:characters_to_list(Node)) + end). + +-spec 'crlf'(input(), index()) -> parse_result(). +'crlf'(Input, Index) -> + p(Input, Index, 'crlf', fun(I,D) -> (p_seq([p_optional(p_string(<<"\r">>)), p_string(<<"\n">>)]))(I,D) end, fun(_Node, _Idx) ->ws end). + +-spec 'eof'(input(), index()) -> parse_result(). +'eof'(Input, Index) -> + p(Input, Index, 'eof', fun(I,D) -> (p_not(p_anything()))(I,D) end, fun(_Node, _Idx) ->ws end). + +-spec 'ws'(input(), index()) -> parse_result(). +'ws'(Input, Index) -> + p(Input, Index, 'ws', fun(I,D) -> (p_charclass(<<"[\s\t]">>))(I,D) end, fun(_Node, _Idx) ->ws end). + + + +-file("peg_includes.hrl", 1). +-type index() :: {{line, pos_integer()}, {column, pos_integer()}}. +-type input() :: binary(). +-type parse_failure() :: {fail, term()}. +-type parse_success() :: {term(), input(), index()}. +-type parse_result() :: parse_failure() | parse_success(). +-type parse_fun() :: fun((input(), index()) -> parse_result()). +-type xform_fun() :: fun((input(), index()) -> term()). + +-spec p(input(), index(), atom(), parse_fun(), xform_fun()) -> parse_result(). +p(Inp, StartIndex, Name, ParseFun, TransformFun) -> + case get_memo(StartIndex, Name) of % See if the current reduction is memoized + {ok, Memo} -> %Memo; % If it is, return the stored result + Memo; + _ -> % If not, attempt to parse + Result = case ParseFun(Inp, StartIndex) of + {fail,_} = Failure -> % If it fails, memoize the failure + Failure; + {Match, InpRem, NewIndex} -> % If it passes, transform and memoize the result. + Transformed = TransformFun(Match, StartIndex), + {Transformed, InpRem, NewIndex} + end, + memoize(StartIndex, Name, Result), + Result + end. + +-spec setup_memo() -> ets:tid(). +setup_memo() -> + put({parse_memo_table, ?MODULE}, ets:new(?MODULE, [set])). + +-spec release_memo() -> true. +release_memo() -> + ets:delete(memo_table_name()). + +-spec memoize(index(), atom(), parse_result()) -> true. +memoize(Index, Name, Result) -> + Memo = case ets:lookup(memo_table_name(), Index) of + [] -> []; + [{Index, Plist}] -> Plist + end, + ets:insert(memo_table_name(), {Index, [{Name, Result}|Memo]}). + +-spec get_memo(index(), atom()) -> {ok, term()} | {error, not_found}. +get_memo(Index, Name) -> + case ets:lookup(memo_table_name(), Index) of + [] -> {error, not_found}; + [{Index, Plist}] -> + case proplists:lookup(Name, Plist) of + {Name, Result} -> {ok, Result}; + _ -> {error, not_found} + end + end. + +-spec memo_table_name() -> ets:tid(). +memo_table_name() -> + get({parse_memo_table, ?MODULE}). + +-ifdef(p_eof). +-spec p_eof() -> parse_fun(). +p_eof() -> + fun(<<>>, Index) -> {eof, [], Index}; + (_, Index) -> {fail, {expected, eof, Index}} end. +-endif. + +-ifdef(p_optional). +-spec p_optional(parse_fun()) -> parse_fun(). +p_optional(P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} -> {[], Input, Index}; + {_, _, _} = Success -> Success + end + end. +-endif. + +-ifdef(p_not). +-spec p_not(parse_fun()) -> parse_fun(). +p_not(P) -> + fun(Input, Index)-> + case P(Input,Index) of + {fail,_} -> + {[], Input, Index}; + {Result, _, _} -> {fail, {expected, {no_match, Result},Index}} + end + end. +-endif. + +-ifdef(p_assert). +-spec p_assert(parse_fun()) -> parse_fun(). +p_assert(P) -> + fun(Input,Index) -> + case P(Input,Index) of + {fail,_} = Failure-> Failure; + _ -> {[], Input, Index} + end + end. +-endif. + +-ifdef(p_seq). +-spec p_seq([parse_fun()]) -> parse_fun(). +p_seq(P) -> + fun(Input, Index) -> + p_all(P, Input, Index, []) + end. + +-spec p_all([parse_fun()], input(), index(), [term()]) -> parse_result(). +p_all([], Inp, Index, Accum ) -> {lists:reverse( Accum ), Inp, Index}; +p_all([P|Parsers], Inp, Index, Accum) -> + case P(Inp, Index) of + {fail, _} = Failure -> Failure; + {Result, InpRem, NewIndex} -> p_all(Parsers, InpRem, NewIndex, [Result|Accum]) + end. +-endif. + +-ifdef(p_choose). +-spec p_choose([parse_fun()]) -> parse_fun(). +p_choose(Parsers) -> + fun(Input, Index) -> + p_attempt(Parsers, Input, Index, none) + end. + +-spec p_attempt([parse_fun()], input(), index(), none | parse_failure()) -> parse_result(). +p_attempt([], _Input, _Index, Failure) -> Failure; +p_attempt([P|Parsers], Input, Index, FirstFailure)-> + case P(Input, Index) of + {fail, _} = Failure -> + case FirstFailure of + none -> p_attempt(Parsers, Input, Index, Failure); + _ -> p_attempt(Parsers, Input, Index, FirstFailure) + end; + Result -> Result + end. +-endif. + +-ifdef(p_zero_or_more). +-spec p_zero_or_more(parse_fun()) -> parse_fun(). +p_zero_or_more(P) -> + fun(Input, Index) -> + p_scan(P, Input, Index, []) + end. +-endif. + +-ifdef(p_one_or_more). +-spec p_one_or_more(parse_fun()) -> parse_fun(). +p_one_or_more(P) -> + fun(Input, Index)-> + Result = p_scan(P, Input, Index, []), + case Result of + {[_|_], _, _} -> + Result; + _ -> + {fail, {expected, Failure, _}} = P(Input,Index), + {fail, {expected, {at_least_one, Failure}, Index}} + end + end. +-endif. + +-ifdef(p_label). +-spec p_label(atom(), parse_fun()) -> parse_fun(). +p_label(Tag, P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} = Failure -> + Failure; + {Result, InpRem, NewIndex} -> + {{Tag, Result}, InpRem, NewIndex} + end + end. +-endif. + +-ifdef(p_scan). +-spec p_scan(parse_fun(), input(), index(), [term()]) -> {[term()], input(), index()}. +p_scan(_, <<>>, Index, Accum) -> {lists:reverse(Accum), <<>>, Index}; +p_scan(P, Inp, Index, Accum) -> + case P(Inp, Index) of + {fail,_} -> {lists:reverse(Accum), Inp, Index}; + {Result, InpRem, NewIndex} -> p_scan(P, InpRem, NewIndex, [Result | Accum]) + end. +-endif. + +-ifdef(p_string). +-spec p_string(binary()) -> parse_fun(). +p_string(S) -> + Length = erlang:byte_size(S), + fun(Input, Index) -> + try + <> = Input, + {S, Rest, p_advance_index(S, Index)} + catch + error:{badmatch,_} -> {fail, {expected, {string, S}, Index}} + end + end. +-endif. + +-ifdef(p_anything). +-spec p_anything() -> parse_fun(). +p_anything() -> + fun(<<>>, Index) -> {fail, {expected, any_character, Index}}; + (Input, Index) when is_binary(Input) -> + <> = Input, + {<>, Rest, p_advance_index(<>, Index)} + end. +-endif. + +-ifdef(p_charclass). +-spec p_charclass(string() | binary()) -> parse_fun(). +p_charclass(Class) -> + {ok, RE} = re:compile(Class, [unicode, dotall]), + fun(Inp, Index) -> + case re:run(Inp, RE, [anchored]) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {character_class, binary_to_list(Class)}, Index}} + end + end. +-endif. + +-ifdef(p_regexp). +-spec p_regexp(binary()) -> parse_fun(). +p_regexp(Regexp) -> + {ok, RE} = re:compile(Regexp, [unicode, dotall, anchored]), + fun(Inp, Index) -> + case re:run(Inp, RE) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {regexp, binary_to_list(Regexp)}, Index}} + end + end. +-endif. + +-ifdef(line). +-spec line(index() | term()) -> pos_integer() | undefined. +line({{line,L},_}) -> L; +line(_) -> undefined. +-endif. + +-ifdef(column). +-spec column(index() | term()) -> pos_integer() | undefined. +column({_,{column,C}}) -> C; +column(_) -> undefined. +-endif. + +-spec p_advance_index(input() | unicode:charlist() | pos_integer(), index()) -> index(). +p_advance_index(MatchedInput, Index) when is_list(MatchedInput) orelse is_binary(MatchedInput)-> % strings + lists:foldl(fun p_advance_index/2, Index, unicode:characters_to_list(MatchedInput)); +p_advance_index(MatchedInput, Index) when is_integer(MatchedInput) -> % single characters + {{line, Line}, {column, Col}} = Index, + case MatchedInput of + $\n -> {{line, Line+1}, {column, 1}}; + _ -> {{line, Line}, {column, Col+1}} + end. diff --git a/deps/cuttlefish/src/conf_parse.peg b/deps/cuttlefish/src/conf_parse.peg new file mode 100644 index 0000000000000000000000000000000000000000..090ffdd9df6828c4c624533005faef670c9382f7 --- /dev/null +++ b/deps/cuttlefish/src/conf_parse.peg @@ -0,0 +1,165 @@ +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +%% A configuration file may have zero-or-more lines. +config <- line* %{ + [ L || L <- Node, is_setting(L) ] +%}; + +%% Lines are actual settings, comments, or horizontal whitespace, +%% terminated by an end-of-line or end-of-file. +line <- ((setting / comment / ws+) (crlf / eof)) / crlf %{ + case Node of + [ Line, _EOL ] -> Line; + Line -> Line + end +%}; + +%% A setting is a key and a value, joined by =, with surrounding +%% whitespace ignored. +setting <- ws* key ws* "=" ws* value ws* comment? %{ + [ _, Key, _, _Eq, _, Value, _, _ ] = Node, + {Key, Value} +%}; + +%% A key is a series of dot-separated identifiers. +key <- head:word tail:("." word)* %{ + [{head, H}, {tail, T}] = Node, + [unicode:characters_to_list(H)| [ unicode:characters_to_list(W) || [_, W] <- T]] +%}; + +%% A value is any character, with trailing whitespace stripped. +value <- (!((ws* crlf) / comment) .)+ %{ + case unicode:characters_to_binary(Node, utf8, latin1) of + {_Status, _Begining, _Rest} -> + {error, {conf_to_latin1, line(Idx)}}; + Bin -> + binary_to_list(Bin) + end +%}; + +%% A comment is any line that begins with a # sign, leading whitespace +%% allowed. +comment <- ws* "#" (!crlf .)* `comment`; + +%% A word is one or more of letters, numbers and dashes or +%% underscores. +word <- ("\\." / [A-Za-z0-9_-])+ %{ + unescape_dots(unicode:characters_to_list(Node)) +%}; + +%% An end-of-line is signified by a line-feed with an optional +%% preceding carriage-return. +crlf <- "\r"? "\n" `ws`; + +%% The end-of-file is where no character matches. +eof <- !. `ws`; + +%% Whitespace is either spaces or tabs. +ws <- [ \t] `ws`; + +% Erlang code +%{ + +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +%% This module implements the parser for a sysctl-style +%% configuration format. Example: +%% +%% ``` +%% riak.local.node = riak@127.0.0.1 +%% riak.local.http = 127.0.0.1:8098 +%% riak.local.pb = 127.0.0.1:8087 +%% riak.local.storage.backend = bitcask''' +%% +%% This would parse into the following flat proplist: +%% +%% ``` +%% [{<<"riak.local.node">>,<<"riak@127.0.0.1">>}, +%% {<<"riak.local.http">>,<<"127.0.0.1:8098">>}, +%% {<<"riak.local.pb">>,<<"127.0.0.1:8087">>}, +%% {<<"riak.local.storage.backend">>,<<"bitcask">>}]''' +%% +%% Other modules in this application interpret and validate the +%% result of a successful parse. +%% @end +-define(line, true). +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc Only let through lines that are not comments or whitespace. +is_setting(ws) -> false; +is_setting(comment) -> false; +is_setting(_) -> true. + +%% @doc Removes escaped dots from keys +unescape_dots([$\\,$.|Rest]) -> + [$.|unescape_dots(Rest)]; +unescape_dots([]) -> []; +unescape_dots([C|Rest]) -> + [C|unescape_dots(Rest)]. + +-ifdef(TEST). +file_test() -> + Conf = conf_parse:file("test/riak.conf"), + ?assertEqual([ + {["ring_size"],"32"}, + {["anti_entropy"],"debug"}, + {["log","error","file"],"/var/log/error.log"}, + {["log","console","file"],"/var/log/console.log"}, + {["log","syslog"],"on"}, + {["listener","http","internal"],"127.0.0.1:8098"}, + {["listener","http","external"],"10.0.0.1:80"} + ], Conf), + ok. + +utf8_test() -> + Conf = conf_parse:parse("setting = thing" ++ [338] ++ "\n"), + ?assertEqual([{["setting"], + {error, {conf_to_latin1, 1}} + }], Conf), + ok. +-endif. +%} diff --git a/deps/cuttlefish/src/cuttlefish.app.src b/deps/cuttlefish/src/cuttlefish.app.src new file mode 100644 index 0000000000000000000000000000000000000000..84b53e371e1cca50f311e6863edb716e1dfbd221 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish.app.src @@ -0,0 +1,9 @@ +{application,cuttlefish, + [{description,"cuttlefish configuration abstraction"}, + {vsn,"2.2.0"}, + {registered,[]}, + {applications,[kernel,stdlib]}, + {env,[]}, + {licenses,["Apache"]}, + {links,[{"GitHub","https://github.com/Kyorai/cuttlefish"}]}, + {modules,[]}]}. diff --git a/deps/cuttlefish/src/cuttlefish.erl b/deps/cuttlefish/src/cuttlefish.erl new file mode 100644 index 0000000000000000000000000000000000000000..f7e78ca818444ec3228626eec582833b6b24c8c3 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish.erl @@ -0,0 +1,148 @@ +%% ------------------------------------------------------------------- +%% +%% External functions for schema writers and cuttlefish invokers +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + conf_get/2, + conf_get/3, + unset/0, + invalid/1, + otp/2, + otp/3, + warn/1 +]). + +% @doc If DesiredMinimum =< the OTP you're running, then return +% IfGreaterOrEqual, otherwise IfLessThan. +-spec otp(string(), any(), any()) -> any(). +otp(DesiredMinimumOTPVersion, IfGreaterOrEqual, IfLessThan) -> + ActualOTPVersion = erlang:system_info(otp_release), + case otp(DesiredMinimumOTPVersion, ActualOTPVersion) of + true -> IfGreaterOrEqual; + _ -> IfLessThan + end. + +% @doc is ActualOTPVersion >= DesiredMinimumOTPVersion? +-spec otp(string(), string()) -> boolean(). +otp([], []) -> + %% They're the same length AND all previous chars were matches + true; +otp([$R|TMin], Ver) -> + otp(TMin, Ver); +otp(Min, [$R|TVer]) -> + otp(Min, TVer); +otp([H|TMin], [H|TVer]) -> + %% The head chars are equal, test the tails + otp(TMin, TVer); +otp([HMin|_], [HVer|_]) -> + %% The heads are different, check which is greater + HVer >= HMin; +otp([], _Ver) -> + %% The actual OTP release is a longer string, but + %% everything matched up until this point + %% e.g. R16B02, R16B02-basho4 + true; +otp(_Min, []) -> + %% Our Min is a longer string + %% e.g. R16B02-basho4, R16B02 + false. + +% @doc conf_get/2 is a convenience wrapper for proplists:get_value/2 +% for schema writers. Keys to a Conf proplist are variable()s which +% are a list of strings. This function will look for those, but if +% you pass it a string() instead, it will be nice and split that +% string on "." since that's how cuttlefish do. Also, it will +% throw(not_found) if the key is not found in the list which is +% different that proplists:get_value/2's default behavior of returning +% 'undefined'. This makes it easy for cuttlefish translations to abort +% and on error, and not assume a value. If that's what you want, +% please use conf_get/3. formerly cuttlefish_util:conf_get_value/2 +-spec conf_get( + string() | cuttlefish_variable:variable(), + cuttlefish_conf:conf()) -> any(). +conf_get([H|_T]=Variable, ConfigProplist) when is_list(H) -> + case proplists:is_defined(Variable, ConfigProplist) of + true -> + proplists:get_value(Variable, ConfigProplist); + false -> + throw({not_found, Variable}) + end; +conf_get(Variable, ConfigProplist) -> + conf_get( + cuttlefish_variable:tokenize(Variable), + ConfigProplist). + +% @doc conf_get/3 works just like proplists:get_value/3. It expects a +% variable() as the Key, but is nice enough to take a string() and +% split it on "." formerly cuttlefish_util:conf_get_value/3 +-spec conf_get( + string() | cuttlefish_variable:variable(), + cuttlefish_conf:conf(), any()) -> any(). +conf_get([H|_T]=Variable, ConfigProplist, Default) when is_list(H) -> + proplists:get_value(Variable, ConfigProplist, Default); +conf_get(Variable, ConfigProplist, Default) -> + conf_get(cuttlefish_variable:tokenize(Variable), ConfigProplist, Default). + +%% @doc When called inside a translation, tells cuttlefish to omit the +%% Erlang setting from the generated configuration. +-spec unset() -> no_return(). +unset() -> + throw(unset). + +%% @doc When called inside a translation, informs the user that input +%% configuration is invalid, using the supplied reason string. +-spec invalid(string()) -> no_return(). +invalid(Reason) -> + throw({invalid, Reason}). + +%% @doc When called inside a translation, results in a warning message +%% being logged. +-spec warn(iodata()) -> ok. +warn(Str) -> + lager:warning(Str, []). + +-ifdef(TEST). + +otp_test() -> + ?assert(otp("R15B02", "R15B02-basho3")), + ?assert(not(otp("R15B02-basho3", "R15B02"))), + ?assert(otp("R16B02-basho3", "R16B03")), + ?assert(otp("R15B01", "R15B02")), + ?assert(otp("R15B01", "R15B02-basho3")), + ?assert(not(otp("R16B01", "R15B02"))), + ?assert(otp("R16", "R16B03")), + ?assert(otp("R16", "R16A")), + ?assert(not(otp("R16B01", "R16A"))), + ?assert(otp("R16A", "R16A")), + ?assert(otp("R16", "17")), + ?assert(otp("R16B03-1", "17")), + ?assert(not(otp("17", "R16"))), + ?assert(otp("R16A", "17")), + ?assert(not(otp("18", "17"))), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_advanced.erl b/deps/cuttlefish/src/cuttlefish_advanced.erl new file mode 100644 index 0000000000000000000000000000000000000000..05044d63688f751db2ab755c115d6bdbc0506f6b --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_advanced.erl @@ -0,0 +1,75 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_advanced: handles merging of advanced configs +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_advanced). + +-export([overlay/2]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc this function overlays the values in proplist 'AdvancedConfig' +%% on top of 'GeneratedConfig' +overlay(GeneratedConfig, AdvancedConfig) -> + lists:foldl( + fun({ApplicationName, ApplicationConfig}, OuterAcc) -> + GeneratedApplicationConfig = proplists:get_value(ApplicationName, GeneratedConfig, []), + Updated = lists:foldl( + fun({ConfigElementName, ConfigElement}, Acc) -> + cuttlefish_util:replace_proplist_value(ConfigElementName, ConfigElement, Acc) + end, + GeneratedApplicationConfig, + ApplicationConfig), + cuttlefish_util:replace_proplist_value(ApplicationName, Updated, OuterAcc) + end, + GeneratedConfig, + AdvancedConfig). + + +-ifdef(TEST). + +overlay_test() -> + GeneratedConfig = [ + {app1, [{'setting1.1', "value1.1"}]}, + {app2, [{'setting2.1', "value2.1"}]}, + {app3, [{'setting3.1', [{"blah", "blah"}, {"blarg", "blarg"}]}]} + ], + + AdvancedConfig = [ + {app3, [{'setting3.1', i_dont_care}]}, + {app4, [{'some_unschemad_thing', 'like_a_penguin'}]} + ], + + Expected = [ + {app1, [{'setting1.1', "value1.1"}]}, + {app2, [{'setting2.1', "value2.1"}]}, + {app3, [{'setting3.1', i_dont_care}]}, + {app4, [{'some_unschemad_thing', 'like_a_penguin'}]} + ], + NewConfig = overlay(GeneratedConfig, AdvancedConfig), + + ?assertEqual(Expected, NewConfig), + + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_bytesize.erl b/deps/cuttlefish/src/cuttlefish_bytesize.erl new file mode 100644 index 0000000000000000000000000000000000000000..254a75f0baec18a40b7c0037afd94f6b8e17025a --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_bytesize.erl @@ -0,0 +1,97 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_bytesize: complexity for parsing bytesizes +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_bytesize). + +-define(KILOBYTE, 1024). +-define(MEGABYTE, 1048576). +-define(GIGABYTE, 1073741824). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([parse/1, to_string/1]). + +%% @doc turns an integer of bytes into a string. +%% Will use the smallest unit to not lose precision. +%% e.g. 1024 -> 1kb, but 1025 = 1025. +-spec to_string(integer()) -> string(). +to_string(Bytez) -> + case { Bytez rem ?GIGABYTE, Bytez rem ?MEGABYTE, Bytez rem ?KILOBYTE} of + {0, _, _} -> + integer_to_list(Bytez div ?GIGABYTE) ++ "GB"; + {_, 0, _} -> + integer_to_list(Bytez div ?MEGABYTE) ++ "MB"; + {_, _, 0} -> + integer_to_list(Bytez div ?KILOBYTE) ++ "KB"; + _ -> + integer_to_list(Bytez) + end. + +%% @doc the reverse of to_string/1. turns "1kb" or "1KB" into 1024. +-spec parse(string()) -> integer()|cuttlefish_error:error(). +parse(String) -> + case lists:reverse(String) of + [$B,$K|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?KILOBYTE); + [$b,$k|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?KILOBYTE); + [$B,$M|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?MEGABYTE); + [$b,$m|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?MEGABYTE); + [$B,$G|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?GIGABYTE); + [$b,$g|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)),?GIGABYTE); + BSize -> cuttlefish_util:numerify(lists:reverse(BSize)) + end. + +-spec bmult(number()|cuttlefish_error:error(), integer()) -> + number()|cuttlefish_error:error(). +bmult({error, _ErrorTerm}=Error, _Mult) -> + Error; +bmult(Quantity, Multiplier) -> + Quantity * Multiplier. + +-ifdef(TEST). +to_string_test() -> + ?assertEqual("1KB", to_string(1024)), + ?assertEqual("2KB", to_string(2048)), + + ?assertEqual("10MB", to_string(10485760)), + + ?assertEqual("1GB", to_string(1073741824)), + + ?assertEqual("20", to_string(20)), + ok. + +parse_test() -> + ?assertEqual(1024, parse("1kb")), + ?assertEqual(2048, parse("2KB")), + + ?assertEqual(10485760, parse("10mb")), + ?assertEqual(10485760, parse("10MB")), + + ?assertEqual(1073741824, parse("1GB")), + ?assertEqual(1073741824, parse("1gb")), + + ?assertEqual(20, parse("20")), + ?assertEqual({error, {number_parse, "10MB10"}}, parse("10MB10kb")), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_conf.erl b/deps/cuttlefish/src/cuttlefish_conf.erl new file mode 100644 index 0000000000000000000000000000000000000000..52f119136a7fb3dee5eefeb28e0a6c0b59f9b92f --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_conf.erl @@ -0,0 +1,354 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_conf: handles the reading and generation of .conf files +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_conf). + +-export([ + generate/1, + generate_file/2, + file/1, + files/1, + is_variable_defined/2, + pretty_datatype/1]). + +-type conf_pair() :: {cuttlefish_variable:variable(), any()}. +-type conf() :: [conf_pair()]. +-export_type([conf_pair/0, conf/0]). + +-define(FMT(F, Args), lists:flatten(io_lib:format(F, Args))). + +is_variable_defined(VariableDef, Conf) -> + lists:any(fun({X, _}) -> cuttlefish_variable:is_fuzzy_match(X, VariableDef) end, Conf). + +-spec files([file:name()]) -> conf() | cuttlefish_error:errorlist(). +files(ListOfConfFiles) -> + {ValidConf, Errors} = lists:foldl( + fun(ConfFile, {ConfAcc, ErrorAcc}) -> + case cuttlefish_conf:file(ConfFile) of + {errorlist, ErrorList} -> + {ConfAcc, ErrorList ++ ErrorAcc}; + Conf -> + {lists:foldl( + fun({K,V}, MiniAcc) -> + cuttlefish_util:replace_proplist_value(K, V, MiniAcc) + end, + ConfAcc, + Conf), ErrorAcc} + end + end, + {[], []}, + ListOfConfFiles), + case {ValidConf, Errors} of + {_, []} -> ValidConf; + _ -> {errorlist, Errors} + end. + +-spec file(file:name()) -> conf() | cuttlefish_error:errorlist(). +file(Filename) -> + case conf_parse:file(Filename) of + {error, Reason} -> + %% Reason is an atom via file:open + {errorlist, [{error, {file_open, {Filename, Reason}}}]}; + {_Conf, Remainder, {{line, L}, {column, C}}} when is_binary(Remainder) -> + {errorlist, [{error, {conf_syntax, {Filename, {L, C}}}}]}; + Conf -> + %% Conf is a proplist, check if any of the values are cuttlefish_errors + {_, Values} = lists:unzip(Conf), + case cuttlefish_error:filter(Values) of + {errorlist, []} -> + remove_duplicates(Conf); + {errorlist, ErrorList} -> + NewErrorList = [ {error, {in_file, {Filename, E}}} || {error, E} <- ErrorList ], + {errorlist, NewErrorList} + end + end. + +-spec generate([cuttlefish_mapping:mapping()]) -> [string()]. +generate(Mappings) -> + lists:foldl( + fun(Mapping, ConfFile) -> + ConfFile ++ generate_element(Mapping) + end, [], Mappings). + +-spec generate_file([cuttlefish_mapping:mapping()], string()) -> ok. +generate_file(Mappings, Filename) -> + ConfFileLines = generate(Mappings), + + {ok, S} = file:open(Filename, [write]), + _ = [ begin + io:format(S, "~s~n", [lists:flatten(Line)]) + end || Line <- ConfFileLines], + _ = file:close(S), + ok. + +-spec generate_element(cuttlefish_mapping:mapping()) -> [string()]. +generate_element(MappingRecord) -> + Default = get_default(MappingRecord), + Key = cuttlefish_mapping:variable(MappingRecord), + Commented = cuttlefish_mapping:commented(MappingRecord), + Level = cuttlefish_mapping:level(MappingRecord), + Hidden = cuttlefish_mapping:hidden(MappingRecord), + IncDef = cuttlefish_mapping:include_default(MappingRecord), + [Datatype|_] = cuttlefish_mapping:datatype(MappingRecord), + %% level != basic OR hidden == true: leave out of generated .conf file + %% commeneted $val: insert into .conf file, but commented out with $val + %% include_default $val: substitute '$name' or whatever in the key for $val + %% e.g. {include_default, "internal"} + %% listener.http.$name -> listener.http.internal + + Field = cuttlefish_variable:format(cuttlefish_variable:replace_match(Key, IncDef)), + + case Level of + basic -> ok; + Level -> + lager:warning("{level, ~p} has been deprecated. Use 'hidden' or '{hidden, true}'", [Level]) + end, + + case generate_element(Hidden, Level, Default, Commented) of + no -> + []; + commented -> + Comments = generate_comments(MappingRecord), + Comments ++ [lists:flatten([ "## ", Field, " = ", cuttlefish_datatypes:to_string(Commented, Datatype) ]), ""]; + default -> + Comments = generate_comments(MappingRecord), + Comments ++ [lists:flatten([ Field, " = ", cuttlefish_datatypes:to_string(Default, Datatype) ]), ""] + end. + +get_default(MappingRecord) -> + %% Normally we use `default` to determine what value to use when generating + %% a config file, but `new_conf_value` can override that. The reason we need + %% a separate attribute to override `default` (instead of just changing the + %% default directly) is that `default` also affects default values used for + %% config keys that haven't been set to any particular value in the .conf file. + %% (See `cuttlefish_generator:add_defaults` for the relevant bits of code.) + case cuttlefish_mapping:new_conf_value(MappingRecord) of + undefined -> + cuttlefish_mapping:default(MappingRecord); + Value -> + Value + end. + +generate_element(true, _, _, _) -> no; +generate_element(false, _, undefined, undefined) -> no; +generate_element(false, basic, _Default, undefined) -> default; +generate_element(false, basic, _, _Comment) -> commented; +generate_element(false, _Level, _Default, _Commented) -> no. + +-spec generate_comments(cuttlefish_mapping:mapping()) -> [string()]. +generate_comments(M) -> + DocString = cuttlefish_mapping:doc(M), + + [DefaultDT|_] = cuttlefish_mapping:datatype(M), + Default = case cuttlefish_mapping:default(M) of + undefined -> []; + Other -> + [ "", ?FMT("Default: ~s", [cuttlefish_datatypes:to_string(Other, DefaultDT)]) ] + end, + + Datatypes = ["", "Acceptable values:" | + [ ?FMT(" - ~s", [pretty_datatype(DT)]) + || DT <- cuttlefish_mapping:datatype(M)]], + + Doc = DocString ++ Default ++ Datatypes, + [ "## " ++ D || D <- Doc]. + +-spec pretty_datatype(cuttlefish_datatypes:datatype() | + cuttlefish_datatypes:extended()) -> string(). +pretty_datatype(integer) -> "an integer"; +pretty_datatype({enum, L}) -> + "one of: " ++ string:join([ atom_to_list(A) || A <- L], ", "); +pretty_datatype(ip) -> "an IP/port pair, e.g. 127.0.0.1:10011"; +pretty_datatype({duration, _}) -> "a time duration with units, e.g. '10s' for 10 seconds"; +pretty_datatype(bytesize) -> "a byte size with units, e.g. 10GB"; +pretty_datatype({integer, I}) -> "the integer " ++ integer_to_list(I); +pretty_datatype({string, S}) -> "the text \"" ++ S ++ "\""; +pretty_datatype({atom, A}) -> "the text \"" ++ atom_to_list(A) ++ "\""; +pretty_datatype({ip, {IP, Port}}) -> ?FMT("the address ~s:~p", [IP, Port]); +pretty_datatype({{duration,_}, D}) -> "the time duration " ++ D; +pretty_datatype({bytesize, B}) -> "the bytesize " ++ B; +pretty_datatype(file) -> "the path to a file"; +pretty_datatype(directory) -> "the path to a directory"; +pretty_datatype({file, F}) -> "the file " ++ F; +pretty_datatype({directory, D}) -> "the directory " ++ D; +pretty_datatype(flag) -> "on or off"; +pretty_datatype({flag, On, Off}) when is_atom(On), is_atom(Off) -> + ?FMT("~p or ~p", [On, Off]); +pretty_datatype({flag, {On,_}, {Off,_}}) -> + ?FMT("~p or ~p", [On, Off]); +pretty_datatype(_) -> "text". %% string and atom + +remove_duplicates(Conf) -> + lists:foldl( + fun({K,V}, MiniAcc) -> + cuttlefish_util:replace_proplist_value(K, V, MiniAcc) + end, + [], + Conf). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-ifdef(TEST). + +generate_element_test() -> + + TestSchemaElement = + cuttlefish_mapping:parse({mapping, "ring_size", "riak_core.ring_creation_size", + [ + {datatype, integer}, + {commented, 64}, + {doc, ["Default ring creation size. Make sure it is a power of 2,", + "e.g. 16, 32, 64, 128, 256, 512 etc"]} + ] + }), + + + GeneratedConf = generate_element(TestSchemaElement), + + ?assertEqual(7, length(GeneratedConf)), + ?assertEqual( + "## Default ring creation size. Make sure it is a power of 2,", + lists:nth(1, GeneratedConf) + ), + ?assertEqual( + "## e.g. 16, 32, 64, 128, 256, 512 etc", + lists:nth(2, GeneratedConf) + ), + ?assertEqual( + "## ", + lists:nth(3, GeneratedConf) + ), + ?assertEqual( + "## Acceptable values:", + lists:nth(4, GeneratedConf) + ), + ?assertEqual( + "## - an integer", + lists:nth(5, GeneratedConf) + ), + ?assertEqual( + "## ring_size = 64", + lists:nth(6, GeneratedConf) + ), + ok. + +generate_conf_default_test() -> + TestMappings = [{mapping, "default.absent", "undefined", + [{datatype, integer}, + {new_conf_value, 42}]}, + {mapping, "default.present", "undefined", + [{datatype, integer}, + {default, -1}, + {new_conf_value, 9001}]}], + + TestSchema = lists:map(fun cuttlefish_mapping:parse/1, TestMappings), + GeneratedConf = generate(TestSchema), + + %% TODO Feels pretty fragile to rely on the number of comment lines not changing... + %% Would be nice if we had a good way to pinpoint the line we want to check without + %% having to hardcode the line numbers into the lists:nth calls. + ?assertEqual( + "default.absent = 42", + lists:nth(4, GeneratedConf) + ), + ?assertEqual( + "default.present = 9001", + lists:nth(11, GeneratedConf) + ), + ok. + +generate_dollar_test() -> + TestSchemaElement = + cuttlefish_mapping:parse({ mapping, "listener.http.$name", "riak_core.http", [ + {datatype, ip}, + {default, "127.0.0.1:8098"}, + {mapping, "riak_core.http"}, + {include_default,"internal"} + ]}), + _GeneratedConf = generate_element(TestSchemaElement), + + ok. + +generate_comments_test() -> + SchemaElement = cuttlefish_mapping:parse({ mapping, "dont.care", "undefined", [ + {doc, ["Hi!", "Bye!"]} + ]}), + Comments = generate_comments(SchemaElement), + ?assertEqual(["## Hi!", "## Bye!", "## ", "## Acceptable values:", "## - text"], Comments). + +duplicates_test() -> + Conf = file("test/multi1.conf"), + ?assertEqual(2, length(Conf)), + ?assertEqual("3", proplists:get_value(["a","b","c"], Conf)), + ?assertEqual("1", proplists:get_value(["a","b","d"], Conf)), + ok. + +duplicates_multi_test() -> + Conf = files(["test/multi1.conf", "test/multi2.conf"]), + ?assertEqual(2, length(Conf)), + ?assertEqual("4", proplists:get_value(["a","b","c"], Conf)), + ?assertEqual("1", proplists:get_value(["a","b","d"], Conf)), + ok. + +files_one_nonent_test() -> + Conf = files(["test/multi1.conf", "test/nonent.conf"]), + ?assertEqual({errorlist,[{error, {file_open, {"test/nonent.conf", undefined}}}]}, Conf), + ok. + +files_incomplete_parse_test() -> + Conf = file("test/incomplete.conf"), + ?assertEqual({errorlist, [{error, {conf_syntax, {"test/incomplete.conf", {3, 1}}}}]}, Conf), + ok. + +generate_element_level_advanced_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output({level, advanced}), + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "{level, advanced} has been deprecated. Use 'hidden' or '{hidden, true}'")), + ok. + +generate_element_level_intermediate_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output({level, intermediate}), + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "{level, intermediate} has been deprecated. Use 'hidden' or '{hidden, true}'")), + ok. + +generate_element_hidden_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output(hidden), + assert_no_output({hidden, true}), + ?assertEqual([], cuttlefish_lager_test_backend:get_logs()), + ok. + +assert_no_output(Setting) -> + Mapping = cuttlefish_mapping:parse( + {mapping, + "a", "b", [ + {doc, ["blah"]}, + Setting + ]}), + + ?assertEqual([], generate_element(Mapping)). + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_datatypes.erl b/deps/cuttlefish/src/cuttlefish_datatypes.erl new file mode 100644 index 0000000000000000000000000000000000000000..71a99052fc3894622be32188c95cdafba098ca94 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_datatypes.erl @@ -0,0 +1,518 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_datatypes: handles datatypes in cuttlefish schemas +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_datatypes). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-type datatype() :: integer | + string | + atom | + file | + directory | + flag | + {flag, atom(), atom()} | + {flag, {atom(), term()}, {atom(), term()}} | + {enum, [atom()]} | + ip | + {duration, cuttlefish_duration:time_unit() } | + bytesize | + {percent, integer} | + {percent, float} | + float. +-type extended() :: { integer, integer() } | + { string, string() } | + { file, file:filename() } | + { directory, file:filename() } | + { atom, atom() } | + { ip, { string(), integer() } } | + { {duration, cuttlefish_duration:time_unit() }, string() } | + { bytesize, string() } | + { {percent, integer}, integer() } | + { {percent, float}, float() } | + { float, float() }. +-type datatype_list() :: [ datatype() | extended() ]. + +-export_type([datatype/0, extended/0, datatype_list/0]). + +-export([ + is_supported/1, + is_extended/1, + is_valid_list/1, + from_string/2, + to_string/2, + extended_from/1 +]). + +-spec is_supported(any()) -> boolean(). +is_supported(integer) -> true; +is_supported(string) -> true; +is_supported(file) -> true; +is_supported(directory) -> true; +is_supported(flag) -> true; +is_supported({flag, On, Off}) when is_atom(On), is_atom(Off) -> true; +is_supported({flag, {On, _}, {Off, _}}) when is_atom(On), is_atom(Off) -> true; +is_supported(atom) -> true; +is_supported({enum, E}) when is_list(E) -> true; +is_supported(ip) -> true; +is_supported({duration, f}) -> true; +is_supported({duration, w}) -> true; +is_supported({duration, d}) -> true; +is_supported({duration, h}) -> true; +is_supported({duration, m}) -> true; +is_supported({duration, s}) -> true; +is_supported({duration, ms}) -> true; +is_supported(bytesize) -> true; +is_supported({percent, integer}) -> true; +is_supported({percent, float}) -> true; +is_supported(float) -> true; +is_supported(_) -> false. + +-spec is_extended(any()) -> boolean(). +is_extended({integer, I}) when is_integer(I) -> true; +is_extended({string, S}) when is_list(S) -> true; +is_extended({atom, A}) when is_atom(A) -> true; +is_extended({file, F}) when is_list(F) -> true; +is_extended({directory, D}) when is_list(D) -> true; +is_extended({ip, {IP, Port}}) when is_list(IP) andalso is_integer(Port) -> true; +is_extended({ip, StringIP}) when is_list(StringIP) -> true; +is_extended({{duration, f}, D}) when is_list(D) -> true; +is_extended({{duration, w}, D}) when is_list(D) -> true; +is_extended({{duration, d}, D}) when is_list(D) -> true; +is_extended({{duration, g}, D}) when is_list(D) -> true; +is_extended({{duration, m}, D}) when is_list(D) -> true; +is_extended({{duration, s}, D}) when is_list(D) -> true; +is_extended({{duration, ms}, D}) when is_list(D) -> true; +is_extended({bytesize, B}) when is_list(B) -> true; +is_extended({{percent, integer}, _Int}) -> true; +is_extended({{percent, float}, _Float}) -> true; +is_extended({float, F}) when is_float(F) -> true; +is_extended(_) -> false. + +-spec extended_from(extended()) -> datatype(). +extended_from({integer, _}) -> integer; +extended_from({string, _}) -> string; +extended_from({atom, _}) -> atom; +extended_from({file, _}) -> file; +extended_from({directory, _}) -> directory; +extended_from({ip, _}) -> ip; +extended_from({{duration, Unit}, _}) -> {duration, Unit}; +extended_from({bytesize, _}) -> bytesize; +extended_from({{percent, integer}, _}) -> {percent, integer}; +extended_from({{percent, float}, _}) -> {percent, float}; +extended_from({float, _}) -> float; +extended_from(Other) -> + case is_supported(Other) of + true -> + Other; + _ -> error + end. + +-spec is_valid_list(any()) -> boolean(). +is_valid_list(NotList) when not is_list(NotList) -> + false; +is_valid_list([]) -> false; +is_valid_list(List) -> + lists:all(fun(X) -> + is_supported(X) + orelse + is_extended(X) + end, List). + +-spec to_string(term(), datatype()) -> string() | cuttlefish_error:error(). +to_string(Atom, atom) when is_list(Atom) -> Atom; +to_string(Atom, atom) when is_atom(Atom) -> atom_to_list(Atom); + +to_string(Integer, integer) when is_integer(Integer) -> integer_to_list(Integer); +to_string(Integer, integer) when is_list(Integer) -> Integer; + +to_string({IP, Port}, ip) when is_list(IP), is_integer(Port) -> IP ++ ":" ++ integer_to_list(Port); +to_string(IPString, ip) when is_list(IPString) -> IPString; + +to_string(Enum, {enum, _}) when is_list(Enum) -> Enum; +to_string(Enum, {enum, _}) when is_atom(Enum) -> atom_to_list(Enum); + +to_string(Duration, {duration, _}) when is_list(Duration) -> Duration; +to_string(Duration, {duration, Unit}) when is_integer(Duration) -> cuttlefish_duration:to_string(Duration, Unit); + +to_string(Bytesize, bytesize) when is_list(Bytesize) -> Bytesize; +to_string(Bytesize, bytesize) when is_integer(Bytesize) -> cuttlefish_bytesize:to_string(Bytesize); + +to_string(String, string) when is_list(String) -> String; + +to_string(File, file) when is_list(File) -> File; + +to_string(Directory, directory) when is_list(Directory) -> Directory; + +to_string(Flag, flag) when is_atom(Flag) -> cuttlefish_flag:to_string(Flag, flag); +to_string(Flag, flag) when is_list(Flag) -> cuttlefish_flag:to_string(Flag, flag); +to_string(Flag, {flag, _, _}=Type) when is_atom(Flag) -> cuttlefish_flag:to_string(Flag, Type); +to_string(Flag, {flag, _, _}=Type) when is_list(Flag) -> cuttlefish_flag:to_string(Flag, Type); + +to_string(Percent, {percent, integer}) when is_integer(Percent) -> + integer_to_list(Percent) ++ "%"; +to_string(Percent, {percent, integer}) when is_list(Percent) -> + Percent; +to_string(Percent, {percent, float}) when is_float(Percent) -> + P = list_to_float(float_to_list(Percent * 100, [{decimals, 6}, compact])), + integer_to_list(cuttlefish_util:ceiling(P)) ++ "%"; +to_string(Percent, {percent, float}) when is_list(Percent) -> + Percent; + +to_string(Float, float) when is_float(Float) -> + float_to_list(Float, [{decimals, 6}, compact]); +to_string(Float, float) when is_list(Float) -> Float; + +%% The Pokemon Clause: Gotta Catch 'em all! +to_string(Value, MaybeExtendedDatatype) -> + case is_extended(MaybeExtendedDatatype) of + true -> + to_string(Value, extended_from(MaybeExtendedDatatype)); + _ -> + {error, {type, {Value, MaybeExtendedDatatype}}} + end. + +-spec from_string(term(), datatype()) -> term() | cuttlefish_error:error(). +from_string(Atom, atom) when is_atom(Atom) -> Atom; +from_string(String, atom) when is_list(String) -> list_to_atom(String); + +from_string(Value, {enum, Enum}) -> + cuttlefish_enum:parse(Value, {enum, Enum}); + +from_string(Integer, integer) when is_integer(Integer) -> Integer; +from_string(String, integer) when is_list(String) -> + try list_to_integer(String) of + X -> X + catch + _:_ -> {error, {conversion, {String, integer}}} + end; + +from_string({IP, Port}, ip) when is_list(IP), is_integer(Port) -> {IP, Port}; +from_string(String, ip) when is_list(String) -> + from_string_to_ip(String, lists:split(string:rchr(String, $:), String)); + +from_string(Duration, {duration, _}) when is_integer(Duration) -> Duration; +from_string(Duration, {duration, Unit}) when is_list(Duration) -> cuttlefish_duration:parse(Duration, Unit); + +from_string(Bytesize, bytesize) when is_integer(Bytesize) -> Bytesize; +from_string(Bytesize, bytesize) when is_list(Bytesize) -> cuttlefish_bytesize:parse(Bytesize); + +from_string(String, string) when is_list(String) -> String; + +from_string(File, file) when is_list(File) -> File; + +from_string(Directory, directory) when is_list(Directory) -> Directory; + +from_string(Flag, flag) when is_list(Flag) -> cuttlefish_flag:parse(Flag); +from_string(Flag, flag) when is_atom(Flag) -> cuttlefish_flag:parse(Flag); + +from_string(Flag, {flag, _, _}=Type) when is_list(Flag) -> cuttlefish_flag:parse(Flag, Type); +from_string(Flag, {flag, _, _}=Type) when is_atom(Flag) -> cuttlefish_flag:parse(Flag, Type); + +from_string(Percent, {percent, integer}) when is_integer(Percent), Percent >= 0, Percent =< 100 -> Percent; +from_string(Percent, {percent, integer}) when is_integer(Percent) -> + {error, {range, {{Percent, {percent, integer}}, "0 - 100%"}}}; +%% This clause ends with a percent sign! +from_string(Percent, {percent, integer}) when is_list(Percent) -> + from_string( + list_to_integer(string:sub_string(Percent, 1, length(Percent) - 1)), + {percent, integer}); + +from_string(Percent, {percent, float}) when is_float(Percent), Percent >= 0, Percent =< 1 -> Percent; +from_string(Percent, {percent, float}) when is_float(Percent) -> + {error, {range, {{Percent, {percent, float}}, "0 - 100%"}}}; +%% This clause ends with a percent sign! +from_string(Percent, {percent, float}) when is_list(Percent) -> + from_string( + list_to_integer(string:sub_string(Percent, 1, length(Percent) - 1)) / 100.0, + {percent, float}); + +from_string(Float, float) when is_float(Float) -> Float; +from_string(String, float) when is_list(String) -> + try list_to_float(String) of + X -> X + catch + _:_ -> {error, {conversion, {String, float}}} + end; + +from_string(Thing, InvalidDatatype) -> + {error, {type, {Thing, InvalidDatatype}}}. + + +%%% Utility functions for IP conversion + +port_to_integer(Str) -> + try + list_to_integer(Str) + of + X when X >= 0 -> + X; + %% Negative ports are nonsensical + _X -> + undefined + catch + _:_ -> + undefined + end. + +ip_conversions(String, _IPStr, {error, einval}, _Port) -> + {error, {conversion, {String, 'IP'}}}; +ip_conversions(String, _IPStr, _IP, undefined) -> + {error, {conversion, {String, 'IP'}}}; +ip_conversions(_String, IPStr, {ok, _}, Port) -> + {IPStr, Port}. + +droplast(List) -> + lists:sublist(List, length(List)-1). + +from_string_to_ip(String, {[], String}) -> + {error, {conversion, {String, 'IP'}}}; %% No port +from_string_to_ip(String, {IpPlusColon, PortString}) -> + %% Still need to drop last character from IP, the trailing + %% colon. Perfect use case for lists:droplast/1 but it's a recent + %% addition + IP = droplast(IpPlusColon), + ip_conversions(String, IP, inet:parse_address(IP), port_to_integer(PortString)). + + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +to_string_atom_test() -> + ?assertEqual("split_the", to_string(split_the, atom)), + ?assertEqual("split_the", to_string("split_the", atom)). + +to_string_integer_test() -> + ?assertEqual("32", to_string(32, integer)), + ?assertEqual("32", to_string("32", integer)). + +to_string_ip_test() -> + ?assertEqual("127.0.0.1:8098", to_string("127.0.0.1:8098", ip)), + ?assertEqual("127.0.0.1:8098", to_string({"127.0.0.1", 8098}, ip)). + +to_string_enum_test() -> + ?assertEqual("true", to_string("true", {enum, [true, false]})), + ?assertEqual("true", to_string(true, {enum, [true, false]})). + +to_string_string_test() -> + ?assertEqual("string", to_string("string", string)). + +to_string_duration_test() -> + ?assertEqual("1w", to_string("1w", {duration, s})), + ?assertEqual("1w", to_string(604800000, {duration, ms})). + +to_string_bytesize_test() -> + ?assertEqual("1GB", to_string(1073741824, bytesize)), + ?assertEqual("1GB", to_string("1GB", bytesize)). + +to_string_percent_integer_test() -> + ?assertEqual("10%", to_string(10, {percent, integer})), + ?assertEqual("10%", to_string("10%", {percent, integer})), + ok. + +to_string_percent_float_test() -> + ?assertEqual("10%", to_string(0.1, {percent, float})), + ?assertEqual("10%", to_string("10%", {percent, float})), + ok. + +to_string_float_test() -> + ?assertEqual("0.1", to_string(0.1, float)), + ?assertEqual("0.1", to_string("0.1", float)), + ok. + +to_string_extended_type_test() -> + ?assertEqual("split_the", to_string(split_the, {atom, split_the})), + ?assertEqual("split_the", to_string("split_the", {atom, split_the})), + ?assertEqual("32", to_string(32, {integer, 32})), + ?assertEqual("32", to_string("32", {integer, 32})), + ?assertEqual("127.0.0.1:8098", to_string("127.0.0.1:8098", {ip, "127.0.0.1:8098"})), + ?assertEqual("127.0.0.1:8098", to_string({"127.0.0.1", 8098}, {ip, {"127.0.0.1", 8098}})), + ?assertEqual("string", to_string("string", {string, "string"})), + ?assertEqual("1w", to_string("1w", {{duration, s}, "1w"})), + ?assertEqual("1w", to_string(604800000, {{duration, ms}, "1w"})), + ?assertEqual("1GB", to_string(1073741824, {bytesize, "1GB"})), + ?assertEqual("1GB", to_string("1GB", {bytesize, "1GB"})), + ?assertEqual("10%", to_string(10, {{percent, integer}, "10%"})), + ?assertEqual("10%", to_string("10%", {{percent, integer}, "10%"})), + ?assertEqual("10%", to_string(0.1, {{percent, float}, "10%"})), + ?assertEqual("10%", to_string("10%", {{percent, float}, "10%"})), + ?assertEqual("0.1", to_string(0.1, {float, 0.1})), + ?assertEqual("0.1", to_string("0.1", {float, 0.1})), + ok. + +to_string_unsupported_datatype_test() -> + ?assertEqual("Tried to convert \"Something\" but invalid datatype: unsupported_datatype", ?XLATE(to_string("Something", unsupported_datatype))). + +from_string_atom_test() -> + ?assertEqual(split_the, from_string(split_the, atom)), + ?assertEqual(split_the, from_string("split_the", atom)). + +from_string_integer_test() -> + ?assertEqual(32, from_string(32, integer)), + ?assertEqual(32, from_string("32", integer)), + ?assertEqual("\"thirty_two\" cannot be converted to a(n) integer", ?XLATE(from_string("thirty_two", integer))), + ok. + +from_string_ip_test() -> + ?assertEqual({"127.0.0.1", 8098}, from_string("127.0.0.1:8098", ip)), + ?assertEqual( + {"2001:0db8:85a3:0042:1000:8a2e:0370:7334", 8098}, + from_string("2001:0db8:85a3:0042:1000:8a2e:0370:7334:8098", ip)), + ?assertEqual( + {"2001:0db8:85a3::0370:7334", 8098}, + from_string("2001:0db8:85a3::0370:7334:8098", ip)), + ?assertEqual( + {"::1", 1}, + from_string("::1:1", ip)), + + BadIPs = [ + "This is not an IP:80", + "2001:0db8:85a3:0042:1000:8a2e:0370:80", + "127.0.0.1.1:80", + "127.256.0.1:80", + "127.0.0.1", %% No port + "127.0.0.1:-5", + "0:127.0.0.1:80", + "127.0.0.1:80l", + ":1:1" + ], + + lists:foreach(fun(Bad) -> + ?assertEqual({error, {conversion, {Bad, 'IP'}}}, + from_string(Bad, ip)) + end, + BadIPs), + ok. + +from_string_enum_test() -> + ?assertEqual("\"a\" is not a valid enum value, acceptable values are: b, c", ?XLATE(from_string(a, {enum, [b, c]}))), + ?assertEqual(true, from_string("true", {enum, [true, false]})), + ?assertEqual(true, from_string(true, {enum, [true, false]})). + +from_string_duration_test() -> + %% more examples in the the cuttlefish_duration tests + ?assertEqual(1100, from_string("1s100ms", {duration, ms})), + ?assertEqual(1100, from_string(1100, {duration, ms})), + ok. + +from_string_duration_secs_test() -> + %% more examples in the the cuttlefish_duration tests + %% also rounds up for smaller units + ?assertEqual(2, from_string("1s100ms", {duration, s})), + ?assertEqual(2, from_string(2, {duration, s})), + ok. + +from_string_percent_integer_test() -> + ?assertEqual(10, from_string("10%", {percent, integer})), + ?assertEqual(10, from_string(10, {percent, integer})), + %% Range! + ?assertEqual(0, from_string("0%", {percent, integer})), + ?assertEqual(100, from_string("100%", {percent, integer})), + ?assertEqual("110% can't be outside the range 0 - 100%", ?XLATE(from_string("110%", {percent, integer}))), + ?assertEqual("-1% can't be outside the range 0 - 100%", ?XLATE(from_string("-1%", {percent, integer}))), + ok. + +from_string_percent_float_test() -> + ?assertEqual(0.10, from_string("10%", {percent, float})), + ?assertEqual(0.10, from_string(0.1, {percent, float})), + %% Range! + ?assertEqual(0.0, from_string("0%", {percent, float})), + ?assertEqual(1.0, from_string("100%", {percent, float})), + ?assertEqual("110% can't be outside the range 0 - 100%", ?XLATE(from_string("110%", {percent, float}))), + ?assertEqual("-1% can't be outside the range 0 - 100%", ?XLATE(from_string("-1%", {percent, float}))), + ok. + +from_string_float_test() -> + ?assertEqual(0.1, from_string("0.100", float)), + ?assertEqual(0.1, from_string(0.1, float)), + ok. + +from_string_string_test() -> + ?assertEqual("string", from_string("string", string)). + +from_string_unsupported_datatype_test() -> + ?assertEqual("Tried to convert \"string\" but invalid datatype: unsupported_datatype", ?XLATE(from_string("string", unsupported_datatype))). + +is_supported_test() -> + ?assert(is_supported(integer)), + ?assert(is_supported(string)), + ?assert(is_supported(atom)), + ?assert(is_supported(file)), + ?assert(is_supported(directory)), + ?assert(is_supported({enum, [one, two, three]})), + ?assert(not(is_supported({enum, not_a_list}))), + ?assert(is_supported(ip)), + ?assert(is_supported({duration, f})), + ?assert(is_supported({duration, w})), + ?assert(is_supported({duration, d})), + ?assert(is_supported({duration, h})), + ?assert(is_supported({duration, m})), + ?assert(is_supported({duration, s})), + ?assert(is_supported({duration, ms})), + ?assert(is_supported(bytesize)), + ?assert(not(is_supported(some_unsupported_type))), + ok. + +is_extended_test() -> + ?assertEqual(true, is_extended({integer, 10})), + ?assertEqual(true, is_extended({integer, -10})), + ?assertEqual(false, is_extended({integer, "ten"})), + + ?assertEqual(true, is_extended({string, "string"})), + ?assertEqual(false, is_extended({string, string})), + ?assertEqual(false, is_extended({string, 10})), + + ?assertEqual(true, is_extended({atom, atom})), + ?assertEqual(false, is_extended({atom, "atom"})), + ?assertEqual(false, is_extended({atom, 10})), + + ?assertEqual(true, is_extended({file, "/tmp/foo.txt"})), + ?assertEqual(true, is_extended({file, ""})), + ?assertEqual(false, is_extended({file, this})), + + ?assertEqual(true, is_extended({directory, "/tmp/foo.txt"})), + ?assertEqual(true, is_extended({directory, ""})), + ?assertEqual(false, is_extended({directory, this})), + + ?assertEqual(true, is_extended({ip, {"1.2.3.4", 1234}})), + ?assertEqual(false, is_extended({ip, {1234, 1234}})), + ?assertEqual(false, is_extended({ip, {"1.2.3.4", "1234"}})), + + ?assertEqual(true, is_extended({{duration, f}, "10f"})), + ?assertEqual(true, is_extended({{duration, w}, "10f"})), + ?assertEqual(true, is_extended({{duration, d}, "10f"})), + ?assertEqual(true, is_extended({{duration, g}, "10f"})), + ?assertEqual(true, is_extended({{duration, m}, "10f"})), + ?assertEqual(true, is_extended({{duration, s}, "10f"})), + ?assertEqual(true, is_extended({{duration, ms}, "10ms"})), + ?assertEqual(true, is_extended({bytesize, "10GB"})), + + ?assertEqual(true, is_extended({{percent, integer}, "10%"})), + ?assertEqual(true, is_extended({{percent, integer}, 10})), + ?assertEqual(true, is_extended({{percent, float}, "10%"})), + ?assertEqual(true, is_extended({{percent, float}, 0.1})), + ?assertEqual(true, is_extended({float, 0.1})), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_duration.erl b/deps/cuttlefish/src/cuttlefish_duration.erl new file mode 100644 index 0000000000000000000000000000000000000000..1cdc48b3f334af790767643661513e15c320d8d8 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration.erl @@ -0,0 +1,170 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration: complexity for parsing durations +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_duration). + +-opaque time_unit() :: f | w | d | h | m | s | ms. +-export_type([time_unit/0]). + +-include("cuttlefish_duration.hrl"). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([parse/1, parse/2, to_string/2]). + +-spec to_string(integer(), time_unit()) -> string(). +to_string(Fortnights, f) -> milliseconds(Fortnights * ?FORTNIGHT); +to_string(Weeks, w) -> milliseconds(Weeks * ?WEEK); +to_string(Days, d) -> milliseconds(Days * ?DAY); +to_string(Hours, h) -> milliseconds(Hours * ?HOUR); +to_string(Minutes, m) -> milliseconds(Minutes * ?MINUTE); +to_string(Seconds, s) -> milliseconds(Seconds * ?SECOND); +to_string(Millis, ms) -> milliseconds(Millis). + +milliseconds(Millis) -> + Units = lists:filter(fun({N, _Unit}) -> N =/= 0 end, [ + { Millis div ?WEEK, "w"}, + {(Millis rem ?WEEK) div ?DAY, "d"}, + {(Millis rem ?DAY) div ?HOUR, "h"}, + {(Millis rem ?HOUR) div ?MINUTE, "m"}, + {(Millis rem ?MINUTE) div ?SECOND, "s"}, + { Millis rem ?SECOND, "ms"} + ]), + lists:flatten([ + integer_to_list(N) ++ Unit + || {N, Unit} <- Units]). + +-spec parse(string(), time_unit()) -> integer(). +parse(DurationString, ms) -> parse(DurationString); +parse(DurationString, Unit) -> + case parse(DurationString) of + {error, _}=Err -> + Err; + Num when is_number(Num) -> + {Unit, Multiplier} = lists:keyfind(Unit, 1, ?MULTIPLIERS), + cuttlefish_util:ceiling(Num / Multiplier) + end. + + +-spec parse(string()) -> integer() | cuttlefish_error:error(). +parse(InputDurationString) -> + DurationString = string:to_lower(InputDurationString), + case cuttlefish_duration_parse:parse(DurationString) of + Float when is_float(Float) -> + cuttlefish_util:ceiling(Float); + Int when is_integer(Int) -> + Int; + _ -> + {error, {duration, InputDurationString}} + end. + +-ifdef(TEST). + +milliseconds_test() -> + ?assertEqual("500ms", milliseconds(500)), + ?assertEqual("1s500ms", milliseconds(1500)), + ?assertEqual("30m", milliseconds(1800000)), + ?assertEqual("1w1d1h1m1s1ms", milliseconds(694861001)), + ok. + +seconds_test() -> + ?assertEqual("50s", to_string(50, s)), + ?assertEqual("1m1s", to_string(61, s)), + ?assertEqual("30m", to_string(1800, s)), + ?assertEqual("1w1d1h1m1s", to_string(694861, s)), + ok. + +parse_test() -> + test_parse(500, "500ms"), + test_parse(500, ".5s"), + test_parse(1001, "1s1ms"), + test_parse(1599, "1s599ms"), + test_parse(1599, "1.599s"), + test_parse(1600, "1.5999s"), + test_parse(60000, "1m"), + test_parse(60000, "60s"), + test_parse(60000, "60000ms"), + test_parse(90000, "1.5m"), + test_parse(90000, "1m30s"), + test_parse(90000, "1m29s1000ms"), + test_parse(1800000, ".5h"), + test_parse(3600000, "1h"), + test_parse(3601000, "1h1s"), + test_parse(3660000, "1h1m"), + test_parse(3661000, "1h1m1s"), + test_parse(3661001, "1h1m1s1ms"), + test_parse(3600000, "60m"), + test_parse(5400000, "90m"), + test_parse(5401000, "90m1s"), + test_parse(5401001, "90m1s1ms"), + test_parse(5400000, "1h30m"), + test_parse(5401000, "1h30m1s"), + test_parse(3660000, "1h1m"), + test_parse(86400000, "1d"), + test_parse(86401000, "1d1s"), + test_parse(86401001, "1d1s1ms"), + test_parse(604800000, "1w"), + test_parse(691200000, "1w1d"), + test_parse(694800000, "1w1d1h"), + test_parse(694860000, "1w1d1h1m"), + test_parse(694861000, "1w1d1h1m1s"), + test_parse(694861001, "1w1d1h1m1s1ms"), + + %% Weird but ok? + test_parse(121001, "1m1s1ms1m"), + + %% Easter Egg + test_parse(1904461001, "1f1w1d1h1m1s1ms"), + ok. + +test_parse(ExpectedMillis, StringToParse) -> + ?assertEqual(ExpectedMillis, parse(StringToParse)). + +parse_2_test() -> + ?assertEqual(1, parse("1ms", ms)), + ?assertEqual(1, parse("1ms", s)), + ?assertEqual(1, parse("1ms", m)), + ?assertEqual(1, parse("1ms", h)), + ?assertEqual(1, parse("1ms", d)), + ?assertEqual(1, parse("1ms", w)), + ?assertEqual(1, parse("1ms", f)), + ok. + +to_string_test() -> + ?assertEqual("2w", to_string(1, f)), + ?assertEqual("2w", to_string(2, w)), + ?assertEqual("1w", to_string(1, w)), + ?assertEqual("1d", to_string(1, d)), + ?assertEqual("1w", to_string(7, d)), + ?assertEqual("1h", to_string(1, h)), + ?assertEqual("1m", to_string(1, m)), + ok. + +parse_error_test() -> + ?assertMatch({error, _}, parse("1q")), + %% This previously raised badarith because it did not check the + %% return value of parse/1. + ?assertMatch({error, _}, catch parse("1q", h)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_duration.hrl b/deps/cuttlefish/src/cuttlefish_duration.hrl new file mode 100644 index 0000000000000000000000000000000000000000..2dfefc144dedbafb24ef5c8edf457c9861a9106d --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration.hrl @@ -0,0 +1,16 @@ +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). +-define(FORTNIGHT, 1209600000). +-define(WEEK, 604800000). +-define(DAY, 86400000). +-define(HOUR, 3600000). +-define(MINUTE, 60000). +-define(SECOND, 1000). + +-define(MULTIPLIERS, + [{f, ?FORTNIGHT}, + {w, ?WEEK}, + {d, ?DAY}, + {h, ?HOUR}, + {m, ?MINUTE}, + {s, ?SECOND}, + {ms, 1}]). diff --git a/deps/cuttlefish/src/cuttlefish_duration_parse.erl b/deps/cuttlefish/src/cuttlefish_duration_parse.erl new file mode 100644 index 0000000000000000000000000000000000000000..58117c71cd0f973b829fd2af2c3d1f2805d5e70a --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration_parse.erl @@ -0,0 +1,343 @@ +-module(cuttlefish_duration_parse). +-export([parse/1,file/1]). +-define(p_charclass,true). +-define(p_choose,true). +-define(p_one_or_more,true). +-define(p_scan,true). +-define(p_seq,true). +-define(p_string,true). +-define(p_zero_or_more,true). + + + + +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration_parse: parses duration strings +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-include("cuttlefish_duration.hrl"). + +-define(FLATTEN(S), binary_to_list(iolist_to_binary(S))). + +-spec file(file:name()) -> any(). +file(Filename) -> + AbsFilename = filename:absname(Filename), + case erl_prim_loader:get_file(AbsFilename) of + {ok, Bin, _} -> parse(Bin); + error -> {error, undefined} + end. + +-spec parse(binary() | list()) -> any(). +parse(List) when is_list(List) -> parse(list_to_binary(List)); +parse(Input) when is_binary(Input) -> + _ = setup_memo(), + Result = case 'duration'(Input,{{line,1},{column,1}}) of + {AST, <<>>, _Index} -> AST; + Any -> Any + end, + release_memo(), Result. + +-spec 'duration'(input(), index()) -> parse_result(). +'duration'(Input, Index) -> + p(Input, Index, 'duration', fun(I,D) -> (p_one_or_more(fun 'duration_segment'/2))(I,D) end, fun(Node, _Idx) ->lists:sum(Node) end). + +-spec 'duration_segment'(input(), index()) -> parse_result(). +'duration_segment'(Input, Index) -> + p(Input, Index, 'duration_segment', fun(I,D) -> (p_seq([p_choose([fun 'float'/2, fun 'integer'/2]), fun 'unit'/2]))(I,D) end, fun(Node, _Idx) -> + [Amount, Span] = Node, + {Span, Multiplier} = lists:keyfind(Span, 1, ?MULTIPLIERS), + Amount * Multiplier + end). + +-spec 'integer'(input(), index()) -> parse_result(). +'integer'(Input, Index) -> + p(Input, Index, 'integer', fun(I,D) -> (p_seq([p_charclass(<<"[1-9]">>), p_zero_or_more(p_charclass(<<"[0-9]">>))]))(I,D) end, fun(Node, _Idx) ->list_to_integer(?FLATTEN(Node)) end). + +-spec 'unit'(input(), index()) -> parse_result(). +'unit'(Input, Index) -> + p(Input, Index, 'unit', fun(I,D) -> (p_choose([p_string(<<"f">>), p_string(<<"w">>), p_string(<<"d">>), p_string(<<"h">>), p_string(<<"ms">>), p_string(<<"m">>), p_string(<<"s">>)]))(I,D) end, fun(Node, _Idx) ->binary_to_atom(Node, latin1) end). + +-spec 'float'(input(), index()) -> parse_result(). +'float'(Input, Index) -> + p(Input, Index, 'float', fun(I,D) -> (p_choose([p_seq([p_one_or_more(p_charclass(<<"[0-9]">>)), p_string(<<".">>), p_one_or_more(p_charclass(<<"[0-9]">>))]), p_seq([p_string(<<".">>), p_one_or_more(p_charclass(<<"[0-9]">>))])]))(I,D) end, fun(Node, _Idx) -> + case Node of + [<<".">>, Mantissa] -> + list_to_float(?FLATTEN(["0.", Mantissa])); + _ -> + list_to_float(?FLATTEN(Node)) + end + end). + + + +-file("peg_includes.hrl", 1). +-type index() :: {{line, pos_integer()}, {column, pos_integer()}}. +-type input() :: binary(). +-type parse_failure() :: {fail, term()}. +-type parse_success() :: {term(), input(), index()}. +-type parse_result() :: parse_failure() | parse_success(). +-type parse_fun() :: fun((input(), index()) -> parse_result()). +-type xform_fun() :: fun((input(), index()) -> term()). + +-spec p(input(), index(), atom(), parse_fun(), xform_fun()) -> parse_result(). +p(Inp, StartIndex, Name, ParseFun, TransformFun) -> + case get_memo(StartIndex, Name) of % See if the current reduction is memoized + {ok, Memo} -> %Memo; % If it is, return the stored result + Memo; + _ -> % If not, attempt to parse + Result = case ParseFun(Inp, StartIndex) of + {fail,_} = Failure -> % If it fails, memoize the failure + Failure; + {Match, InpRem, NewIndex} -> % If it passes, transform and memoize the result. + Transformed = TransformFun(Match, StartIndex), + {Transformed, InpRem, NewIndex} + end, + memoize(StartIndex, Name, Result), + Result + end. + +-spec setup_memo() -> ets:tid(). +setup_memo() -> + put({parse_memo_table, ?MODULE}, ets:new(?MODULE, [set])). + +-spec release_memo() -> true. +release_memo() -> + ets:delete(memo_table_name()). + +-spec memoize(index(), atom(), parse_result()) -> true. +memoize(Index, Name, Result) -> + Memo = case ets:lookup(memo_table_name(), Index) of + [] -> []; + [{Index, Plist}] -> Plist + end, + ets:insert(memo_table_name(), {Index, [{Name, Result}|Memo]}). + +-spec get_memo(index(), atom()) -> {ok, term()} | {error, not_found}. +get_memo(Index, Name) -> + case ets:lookup(memo_table_name(), Index) of + [] -> {error, not_found}; + [{Index, Plist}] -> + case proplists:lookup(Name, Plist) of + {Name, Result} -> {ok, Result}; + _ -> {error, not_found} + end + end. + +-spec memo_table_name() -> ets:tid(). +memo_table_name() -> + get({parse_memo_table, ?MODULE}). + +-ifdef(p_eof). +-spec p_eof() -> parse_fun(). +p_eof() -> + fun(<<>>, Index) -> {eof, [], Index}; + (_, Index) -> {fail, {expected, eof, Index}} end. +-endif. + +-ifdef(p_optional). +-spec p_optional(parse_fun()) -> parse_fun(). +p_optional(P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} -> {[], Input, Index}; + {_, _, _} = Success -> Success + end + end. +-endif. + +-ifdef(p_not). +-spec p_not(parse_fun()) -> parse_fun(). +p_not(P) -> + fun(Input, Index)-> + case P(Input,Index) of + {fail,_} -> + {[], Input, Index}; + {Result, _, _} -> {fail, {expected, {no_match, Result},Index}} + end + end. +-endif. + +-ifdef(p_assert). +-spec p_assert(parse_fun()) -> parse_fun(). +p_assert(P) -> + fun(Input,Index) -> + case P(Input,Index) of + {fail,_} = Failure-> Failure; + _ -> {[], Input, Index} + end + end. +-endif. + +-ifdef(p_seq). +-spec p_seq([parse_fun()]) -> parse_fun(). +p_seq(P) -> + fun(Input, Index) -> + p_all(P, Input, Index, []) + end. + +-spec p_all([parse_fun()], input(), index(), [term()]) -> parse_result(). +p_all([], Inp, Index, Accum ) -> {lists:reverse( Accum ), Inp, Index}; +p_all([P|Parsers], Inp, Index, Accum) -> + case P(Inp, Index) of + {fail, _} = Failure -> Failure; + {Result, InpRem, NewIndex} -> p_all(Parsers, InpRem, NewIndex, [Result|Accum]) + end. +-endif. + +-ifdef(p_choose). +-spec p_choose([parse_fun()]) -> parse_fun(). +p_choose(Parsers) -> + fun(Input, Index) -> + p_attempt(Parsers, Input, Index, none) + end. + +-spec p_attempt([parse_fun()], input(), index(), none | parse_failure()) -> parse_result(). +p_attempt([], _Input, _Index, Failure) -> Failure; +p_attempt([P|Parsers], Input, Index, FirstFailure)-> + case P(Input, Index) of + {fail, _} = Failure -> + case FirstFailure of + none -> p_attempt(Parsers, Input, Index, Failure); + _ -> p_attempt(Parsers, Input, Index, FirstFailure) + end; + Result -> Result + end. +-endif. + +-ifdef(p_zero_or_more). +-spec p_zero_or_more(parse_fun()) -> parse_fun(). +p_zero_or_more(P) -> + fun(Input, Index) -> + p_scan(P, Input, Index, []) + end. +-endif. + +-ifdef(p_one_or_more). +-spec p_one_or_more(parse_fun()) -> parse_fun(). +p_one_or_more(P) -> + fun(Input, Index)-> + Result = p_scan(P, Input, Index, []), + case Result of + {[_|_], _, _} -> + Result; + _ -> + {fail, {expected, Failure, _}} = P(Input,Index), + {fail, {expected, {at_least_one, Failure}, Index}} + end + end. +-endif. + +-ifdef(p_label). +-spec p_label(atom(), parse_fun()) -> parse_fun(). +p_label(Tag, P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} = Failure -> + Failure; + {Result, InpRem, NewIndex} -> + {{Tag, Result}, InpRem, NewIndex} + end + end. +-endif. + +-ifdef(p_scan). +-spec p_scan(parse_fun(), input(), index(), [term()]) -> {[term()], input(), index()}. +p_scan(_, <<>>, Index, Accum) -> {lists:reverse(Accum), <<>>, Index}; +p_scan(P, Inp, Index, Accum) -> + case P(Inp, Index) of + {fail,_} -> {lists:reverse(Accum), Inp, Index}; + {Result, InpRem, NewIndex} -> p_scan(P, InpRem, NewIndex, [Result | Accum]) + end. +-endif. + +-ifdef(p_string). +-spec p_string(binary()) -> parse_fun(). +p_string(S) -> + Length = erlang:byte_size(S), + fun(Input, Index) -> + try + <> = Input, + {S, Rest, p_advance_index(S, Index)} + catch + error:{badmatch,_} -> {fail, {expected, {string, S}, Index}} + end + end. +-endif. + +-ifdef(p_anything). +-spec p_anything() -> parse_fun(). +p_anything() -> + fun(<<>>, Index) -> {fail, {expected, any_character, Index}}; + (Input, Index) when is_binary(Input) -> + <> = Input, + {<>, Rest, p_advance_index(<>, Index)} + end. +-endif. + +-ifdef(p_charclass). +-spec p_charclass(string() | binary()) -> parse_fun(). +p_charclass(Class) -> + {ok, RE} = re:compile(Class, [unicode, dotall]), + fun(Inp, Index) -> + case re:run(Inp, RE, [anchored]) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {character_class, binary_to_list(Class)}, Index}} + end + end. +-endif. + +-ifdef(p_regexp). +-spec p_regexp(binary()) -> parse_fun(). +p_regexp(Regexp) -> + {ok, RE} = re:compile(Regexp, [unicode, dotall, anchored]), + fun(Inp, Index) -> + case re:run(Inp, RE) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {regexp, binary_to_list(Regexp)}, Index}} + end + end. +-endif. + +-ifdef(line). +-spec line(index() | term()) -> pos_integer() | undefined. +line({{line,L},_}) -> L; +line(_) -> undefined. +-endif. + +-ifdef(column). +-spec column(index() | term()) -> pos_integer() | undefined. +column({_,{column,C}}) -> C; +column(_) -> undefined. +-endif. + +-spec p_advance_index(input() | unicode:charlist() | pos_integer(), index()) -> index(). +p_advance_index(MatchedInput, Index) when is_list(MatchedInput) orelse is_binary(MatchedInput)-> % strings + lists:foldl(fun p_advance_index/2, Index, unicode:characters_to_list(MatchedInput)); +p_advance_index(MatchedInput, Index) when is_integer(MatchedInput) -> % single characters + {{line, Line}, {column, Col}} = Index, + case MatchedInput of + $\n -> {{line, Line+1}, {column, 1}}; + _ -> {{line, Line}, {column, Col+1}} + end. diff --git a/deps/cuttlefish/src/cuttlefish_duration_parse.peg b/deps/cuttlefish/src/cuttlefish_duration_parse.peg new file mode 100644 index 0000000000000000000000000000000000000000..4deb2e7a8705405651fd71481111e6be9bd5a0a6 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration_parse.peg @@ -0,0 +1,51 @@ +%% Duration string parser + +duration <- duration_segment+ `lists:sum(Node)`; + +duration_segment <- (float / integer) unit ` + [Amount, Span] = Node, + {Span, Multiplier} = lists:keyfind(Span, 1, ?MULTIPLIERS), + Amount * Multiplier +`; + +integer <- [1-9] [0-9]* `list_to_integer(?FLATTEN(Node))`; + +unit <- "f" / "w" / "d" / "h" / "ms" / "m" / "s" `binary_to_atom(Node, latin1)`; + +float <- ( [0-9]+ "." [0-9]+ ) / ( "." [0-9]+ ) ` + case Node of + [<<".">>, Mantissa] -> + list_to_float(?FLATTEN(["0.", Mantissa])); + _ -> + list_to_float(?FLATTEN(Node)) + end +`; + +` + +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration_parse: parses duration strings +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-include("cuttlefish_duration.hrl"). + +-define(FLATTEN(S), binary_to_list(iolist_to_binary(S))). +` diff --git a/deps/cuttlefish/src/cuttlefish_effective.erl b/deps/cuttlefish/src/cuttlefish_effective.erl new file mode 100644 index 0000000000000000000000000000000000000000..f94722dacdb6f9eb66ddc1be1b54b40cc160a5ec --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_effective.erl @@ -0,0 +1,282 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_effective: handles generating the effective configuration +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_effective). + +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-export([build/3]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-spec build(cuttlefish_conf:conf(), cuttlefish_schema:schema(), [proplists:property()]) -> [string()]. +build(Conf, {_Translations, Mappings, _Validators} = _Schema, AdvConfig) -> + EffectiveConfig = lists:reverse(lists:sort(cuttlefish_generator:add_defaults(Conf, Mappings))), + %% EffectiveConfig is a list of { [string()], term() } + + %% Returns the list of cuttlefish variables that have been overridden in advanced.config + KeysToHateOn = process_advanced(Mappings, AdvConfig), + + EffectiveOutput = lists:foldl( + fun({Var, Value}, Acc) -> + Variable = string:join(Var, "."), + + IsHater = + lists:any( + fun(X) -> + cuttlefish_variable:is_fuzzy_match(Var, X) + end, + KeysToHateOn + ), + + Line = try ?FMT("~s = ~s", [Variable, Value]) of + X -> X + catch + _:_ -> + %% I hate that I had to do this, 'cause you know... + %% Erlang and Strings, but actually this is ok because + %% sometimes there are going to be weird tuply things + %% in here, so always good to fall back on ~p. + %% honestly, I think this try should be built into io:format + ?FMT("~s = ~p", [Variable, Value]) + end, + case IsHater of + true -> + [?FMT("## ~s was overridden in advanced.config", [Variable]), + "## " ++ Line] ++ Acc; + _ -> [Line | Acc] + end + end, + [], + EffectiveConfig + ), + + case AdvConfig of + [] -> EffectiveOutput; + _ -> + EffectiveOutput ++ + [ + "## The following advanced.config was used in generating the ", + "## configuration and may have overridden some options that were ", + "## commented out above." + ] + ++ advanced_as_comment(AdvConfig) + end. + +advanced_as_comment(AdvConfig) -> + Str = lists:flatten(io_lib:format("~p", [AdvConfig])), + [ "## " ++ L || L <- string:tokens(Str, "$\n")]. + +%% @doc checks a mapping's "mapping" is in the set of kvc paths in +%% the provided advanced.config +-spec process_advanced( + [cuttlefish_mapping:mapping()], + [proplists:property()]) -> [cuttlefish_variable:variable()]. +process_advanced(Mappings, AdvancedConfig) -> + AdvKeys = proplist_to_kvcpaths(AdvancedConfig), + lists:foldl( + fun(M, Acc) -> + case lists:member(cuttlefish_mapping:mapping(M), AdvKeys) of + true -> + [cuttlefish_mapping:variable(M)|Acc]; + _ -> Acc + end + end, + [], + Mappings). + +%% @doc returns a list of kvcesque paths that represent the structure +%% of a proplist of proplists of proplists etc... +%% e.g. [{parent, [{child1, [{grandchild1, _}]}, {child2, _}]}] -> +%% ["parent.child1.grandchild1", "parent.child2"] +-spec proplist_to_kvcpaths([proplists:property()]) -> [string()]. +proplist_to_kvcpaths(Proplist) -> + proplist_to_kvcpaths("", Proplist). +-spec proplist_to_kvcpaths(string(), [proplists:property()]) -> [string()]. +proplist_to_kvcpaths(Prefix, Proplist) -> + %% Handles the base case, without this, all keys would start with "." + NewPrefix = case Prefix of + "" -> ""; + _ -> Prefix ++ "." + end, + lists:foldl(fun(K, Acc) -> + KeyedPrefix = NewPrefix ++ canonicalize_key(K), + R = proplist_to_kvcpaths( + KeyedPrefix, + proplists:get_value(K, Proplist)), + case R of + [] -> + [KeyedPrefix|Acc]; + _ -> + Acc ++ R + end + end, + [], + keys_if_you_got_em(Proplist) + ). + +%% So this is gross, but is the simplest scheme for determining the +%% type of data coming into this function. It doesn't really +%% matter how we handle non-atoms because cuttlefish only creates +%% proplists with atoms as the keynames. +-spec canonicalize_key(atom() | list() | binary()) -> string(). +canonicalize_key(K) when is_atom(K) -> + atom_to_list(K); +canonicalize_key(K) when is_list(K) -> + "\"" ++ K ++ "\""; +canonicalize_key(K) when is_binary(K) -> + "<<\""++binary_to_list(K)++"\">>". + + +-spec keys_if_you_got_em([proplists:property()]) -> [term()]. +keys_if_you_got_em(Proplist) when is_list(Proplist) -> + proplists:get_keys(Proplist); +keys_if_you_got_em(_) -> []. + +-ifdef(TEST). + +%% This is the comprehensive test of all functionality of this module +%% working together in perfect harmony +probably_the_most_important_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "namespace.var1", "app.setting1", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.2.$sub", "app.setting2", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.var3", "app.setting3", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.4.$sub", "app.setting4", []} + ) + ], + Conf = [ + {["namespace", "var1"], "x"}, + {["namespace", "2", "1"], "x"}, + {["namespace", "2", "2"], "x"}, + {["namespace", "2", "3"], "x"}, + {["namespace", "var3"], "y"}, + {["namespace", "4", "1"], "y"}, + {["namespace", "4", "2"], "y"}, + {["namespace", "4", "3"], "y"} + ], + AdvConfig = [{app, [{setting3, "z"}, {setting4, "zz"}]}], + + Effective = build(Conf, {[], Mappings, []}, AdvConfig), + ?assertEqual(16, length(Effective)), + + %% Remember, this output is sorted by variable, even if there's a comment + + ?assertEqual("namespace.2.1 = x", lists:nth(1, Effective)), + ?assertEqual("namespace.2.2 = x", lists:nth(2, Effective)), + ?assertEqual("namespace.2.3 = x", lists:nth(3, Effective)), + ?assertEqual("## namespace.4.1 was overridden in advanced.config", lists:nth(4, Effective)), + ?assertEqual("## namespace.4.1 = y", lists:nth(5, Effective)), + ?assertEqual("## namespace.4.2 was overridden in advanced.config", lists:nth(6, Effective)), + ?assertEqual("## namespace.4.2 = y", lists:nth(7, Effective)), + ?assertEqual("## namespace.4.3 was overridden in advanced.config", lists:nth(8, Effective)), + ?assertEqual("## namespace.4.3 = y", lists:nth(9, Effective)), + ?assertEqual("namespace.var1 = x", lists:nth(10, Effective)), + ?assertEqual("## namespace.var3 was overridden in advanced.config", lists:nth(11, Effective)), + ?assertEqual("## namespace.var3 = y", lists:nth(12, Effective)), + ?assertEqual("## The following advanced.config was used in generating the ", lists:nth(13, Effective)), + ?assertEqual("## configuration and may have overridden some options that were ", lists:nth(14, Effective)), + ?assertEqual("## commented out above.", lists:nth(15, Effective)), + ?assertEqual("## [{app,[{setting3,\"z\"},{setting4,\"zz\"}]}]", lists:nth(16, Effective)), + ok. + +process_advanced_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "thing.1", "a.b.c", []} + ) + ], + AdvConfig = [{a, [{b, [{c, ""}, {d, ""}]}]}], + KeysToWatch = process_advanced(Mappings, AdvConfig), + ?assertEqual([["thing", "1"]], KeysToWatch), + ok. + +build_with_sub_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "a.$whatev.thing", "a.b.c", []} + ) + ], + AdvConfig = [{a, [{b, [{c, ""}, {d, ""}]}]}], + Conf = [ + {["a", "1", "thing"], "x"}, + {["a", "2", "thing"], "x"}, + {["a", "3", "thing"], "x"} + ], + + Effective = build(Conf, {[], Mappings, []}, AdvConfig), + + ?assertEqual(10, length(Effective)), + ?assertEqual("## a.1.thing was overridden in advanced.config", lists:nth(1, Effective)), + ?assertEqual("## a.1.thing = x", lists:nth(2, Effective)), + ?assertEqual("## a.2.thing was overridden in advanced.config", lists:nth(3, Effective)), + ?assertEqual("## a.2.thing = x", lists:nth(4, Effective)), + ?assertEqual("## a.3.thing was overridden in advanced.config", lists:nth(5, Effective)), + ?assertEqual("## a.3.thing = x", lists:nth(6, Effective)), + ?assertEqual("## The following advanced.config was used in generating the ", lists:nth(7, Effective)), + ?assertEqual("## configuration and may have overridden some options that were ", lists:nth(8, Effective)), + ?assertEqual("## commented out above.", lists:nth(9, Effective)), + ?assertEqual("## [{a,[{b,[{c,[]},{d,[]}]}]}]", lists:nth(10, Effective)), + ok. + +proplist_to_kvcpath_test() -> + Proplist = [{a, [ + {b, [ + {c, "x"} + ]}, + {d, [ + {e, "y"} + ]}, + {f , "z"} + ] + }, + {g, "q"}], + Paths = proplist_to_kvcpaths(Proplist), + ?assertEqual(sets:from_list([ + "a.b.c", + "a.d.e", + "a.f", + "g" + ]), sets:from_list(Paths)), + ok. + +proplists_to_kvcpath_riak_core_test() -> + Proplist = [{riak_core,[ + {ring_creation_size,128}, + {cluster_mgr, {"127.0.0.1", 9080 } } + ]}], + Paths = proplist_to_kvcpaths(Proplist), + ?assertEqual([ + "riak_core.ring_creation_size", + "riak_core.cluster_mgr" + ], Paths), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_enum.erl b/deps/cuttlefish/src/cuttlefish_enum.erl new file mode 100644 index 0000000000000000000000000000000000000000..75ba20b53c611ca39d145e507c000e8611741063 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_enum.erl @@ -0,0 +1,162 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_enum: datatype for simple enum settings with +%% customizable names and values +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_enum). + +-type enum_list() :: [{atom()|string(), term()}]. +-type enum() :: {enum, enum_list()}. +-type strict_enum_list() :: [{string(), term()}]. +-type strict_enum() :: {enum, strict_enum_list()}. +-export_type([enum/0, strict_enum/0]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + to_string/2, + parse/2 +]). + +-define(FMT(F, A), lists:flatten(io_lib:format(F, A))). + +-spec to_string(string() | atom(), enum() + ) -> string() | cuttlefish_error:error(). +to_string(Value, {enum, _Raw} = Enum) -> + FriendlEnum = assuage_enum(Enum), + case to_string_by_value(Value, FriendlEnum) of + {K, _} -> + atom_to_list_maybe(K); + false -> + to_string_by_key(atom_to_list_maybe(Value), FriendlEnum) + end. + +-spec to_string_by_value(term(), strict_enum()) -> term(). +to_string_by_value(Value, {enum, FriendlEnum}) -> + lists:keyfind(Value, 2, FriendlEnum). + +-spec to_string_by_key(atom() | string(), strict_enum()) -> string(). +to_string_by_key(Key, {enum, FriendlEnum}) -> + case lists:keyfind(Key, 1, FriendlEnum) of + {K, _} -> K; + false -> + to_error(Key, FriendlEnum) + end. + +-spec parse(term(), enum()) -> term() | cuttlefish_error:error(). +parse(Value, {enum, _Raw} = Enum) -> + FriendlEnum = assuage_enum(Enum), + case parse_by_key(atom_to_list_maybe(Value), FriendlEnum) of + {_Key, Val} -> + Val; + false -> + parse_by_value(Value, FriendlEnum) + end. + +-spec parse_by_key(atom() | string() | term(), strict_enum()) -> + {string(), term()} | false. +parse_by_key(Key, {enum, FriendlEnum}) -> + lists:keyfind(Key, 1, FriendlEnum). + +-spec parse_by_value(term(), strict_enum()) -> term() | cuttlefish_error:error(). +parse_by_value(Value, {enum, FriendlEnum}) -> + case lists:keyfind(Value, 2, FriendlEnum) of + false -> + to_error(Value, FriendlEnum); + {_Key, Value} -> + Value + end. + +-spec to_error(atom() | string()| term(), strict_enum_list()) -> cuttlefish_error:error(). +to_error(Value, FriendlEnum) -> + Acceptable = [Key || {Key, _} <- FriendlEnum], + {error, {enum_name, {atom_to_list_maybe(Value), Acceptable}}}. + +-spec atom_to_list_maybe(term()) -> term(). +atom_to_list_maybe(Atom) when is_atom(Atom) -> + atom_to_list(Atom); +atom_to_list_maybe(Other) -> Other. + +-spec assuage_enum(enum()) -> strict_enum() | cuttlefish_error:error(). +assuage_enum({enum, Enum}) -> + FriendlEnum = assuage_enum(Enum, []), + case cuttlefish_error:is_error(FriendlEnum) of + true -> + FriendlEnum; + _ -> + {enum, FriendlEnum} + end. + +-spec assuage_enum(enum_list(), strict_enum_list()) + -> strict_enum_list() | cuttlefish_error:error(). +assuage_enum([], FriendlEnum) -> + lists:reverse(FriendlEnum); +%% If the head is a 2-tuple; yay! +assuage_enum([{Key, Value}|EnumTail], FriendlEnum) when is_atom(Key) -> + assuage_enum(EnumTail, [ { cuttlefish_datatypes:to_string(Key, atom), Value } | FriendlEnum ]); +assuage_enum([{Key, Value}|EnumTail], FriendlEnum) when is_list(Key) -> + assuage_enum(EnumTail, [ { Key, Value } | FriendlEnum ]); +%% If the head is just a string or atom, fall here. +assuage_enum([Key|EnumTail], FriendlEnum) when is_atom(Key) -> + assuage_enum(EnumTail, [ + { cuttlefish_datatypes:to_string(Key, atom), Key } | FriendlEnum]); +assuage_enum([Key|EnumTail], FriendlEnum) when is_list(Key) -> + assuage_enum(EnumTail, [{Key, Key} | FriendlEnum]); +assuage_enum([BadTuple|_], _) when is_tuple(BadTuple) -> + {error, {enum_format, BadTuple}}; +assuage_enum([ErroneousItem|_], _) -> + {error, {enum_format, ErroneousItem}}. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + ?assertEqual(1, parse("one", {enum, [{"one", 1}, two]})), + ?assertEqual(two, parse("two", {enum, [{"one", 1}, two]})), + ok. + +assuage_enum_test() -> + ?assertEqual({enum, [{"true", true}, {"false", false}]}, + assuage_enum({enum, [true, false]})), + ?assertEqual({enum, [{"true", "true"}, {"false", "false"}]}, + assuage_enum({enum, ["true", "false"]})), + ?assertEqual({enum, [{"one", 1}, {"two", 2}]}, + assuage_enum({enum, [{one, 1}, {"two", 2}]})), + ?assertEqual({enum, [{"off", off}, {"on", "On"}]}, + assuage_enum({enum, [off, {on, "On"}]})), + ok. + +assuage_enum_error_test() -> + ?assertEqual( + "Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: {one,two,three}", + ?XLATE(assuage_enum({enum, [{one, two, three}, oops]})) + ), + ?assertEqual( + "Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: 7", + ?XLATE(assuage_enum({enum, [oops, 7]})) + ), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_error.erl b/deps/cuttlefish/src/cuttlefish_error.erl new file mode 100644 index 0000000000000000000000000000000000000000..ca890cf91e1c4288dfc774e61ba60ff6d544a7c1 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_error.erl @@ -0,0 +1,219 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_generator: this is where the action is +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_error). + +-type error() :: {'error', {atom(), term()}}. +-type errorlist() :: {'errorlist', [error()]}. +-export_type([error/0, errorlist/0]). + +-export([ + contains_error/1, + is_error/1, + filter/1, + errorlist_maybe/1, + print/1, + print/2, + xlate/1 +]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% We'll be calling this a lot from `xlate' +-define(STR(X, Y), xlate(cuttlefish_datatypes:to_string(X, Y))). + +-spec xlate({atom(), term()}|string()) -> iolist(). +xlate(Message) when is_list(Message) -> + %% We allow for strings so that we can safely call + %% `cuttlefish_datatypes:to_string` when creating these messages + Message; +xlate({error, Details}) -> + xlate(Details); +xlate({_Error, {error, NestedError}}) -> + xlate(NestedError); +xlate({type, {Value, Type}}) -> + io_lib:format("Tried to convert ~p but invalid datatype: ~p", + [Value, Type]); +xlate({range, {{Value, Type}, Range}}) -> + [?STR(Value, Type), " can't be outside the range ", Range]; +xlate({conversion, {Value, Type}}) -> + io_lib:format("~p cannot be converted to a(n) ~s", [Value, Type]); +xlate({duration, Value}) -> + io_lib:format("Invalid duration value: ~ts", [Value]); +xlate({enum_name, {Value, EnumNames}}) -> + io_lib:format("~p is not a valid enum value, acceptable values are: ~ts", + [Value, string:join(EnumNames, ", ")]); +xlate({enum_format, Value}) -> + %% This collapses two different type of formatting errors into one + %% error message + io_lib:format("Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: ~w", [Value]); +xlate({mapping_types, List}) -> + io_lib:format("Invalid datatype list for mapping: ~ts", + [string:join(List, ", ")]); +xlate({mapping_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_mapping:parse/1 : ~p", + [Term] + ); +xlate({translation_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_translation:parse/1 : ~p", + [Term] + ); +xlate({validator_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_validator:parse/1 : ~p", + [Term] + ); +xlate({conf_to_latin1, LineNum}) -> + io_lib:format("Error converting value on line #~p to latin1", [LineNum]); +xlate({bytesize_parse, Value}) -> + io_lib:format("Error converting value ~p to a number of bytes", [Value]); +xlate({file_open, {File, Reason}}) -> + io_lib:format("Could not open file (~s) for Reason ~s", [File, Reason]); +xlate({conf_syntax, {File, {Line, Col}}}) -> + io_lib:format("Syntax error in ~s after line ~p column ~p, " + "parsing incomplete", [File, Line, Col]); +xlate({in_file, {File, Error}}) -> + [File, ": ", xlate(Error)]; +xlate({translation_missing_setting, {Translation, Setting}}) -> + io_lib:format("Translation for '~s' expected to find setting '~s' but was missing", + [Translation, Setting]); +xlate({translation_invalid_configuration, {Translation, Invalid}}) -> + io_lib:format("Translation for '~s' found invalid configuration: ~s", + [Translation, Invalid]); +xlate({translation_unknown_error, {Translation, {Class, Error}}}) -> + io_lib:format("Error running translation for ~s, [~p, ~p]", + [Translation, Class, Error]); +xlate({translation_arity, {Translation, Arity}}) -> + io_lib:format("~p is not a valid arity for translation fun() ~s." + " Try 1 or 2", [Arity, Translation]); +xlate({map_multiple_match, VariableDefinition}) -> + io_lib:format("~p has both a fuzzy and strict match", [VariableDefinition]); +xlate({unknown_variable, Variable}) -> + ["Conf file attempted to set unknown variable: ", Variable]; +xlate({unsupported_type, Type}) -> + io_lib:format("~p is not a supported datatype", [Type]); +xlate({transform_type, Type}) -> + ["Error transforming datatype for: ", Type]; +xlate({transform_type_exception, {Type, {Class, Error}}}) -> + io_lib:format("Caught exception converting to ~p: ~p:~p", + [Type, Class, Error]); +xlate({transform_type_unacceptable, {Value, BadValue}}) -> + io_lib:format("~p is not accepted value: ~p", [Value, BadValue]); +xlate({circular_rhs, History}) -> + io_lib:format("Circular RHS substitutions: ~p", [History]); +xlate({substitution_missing_config, {Substitution, Variable}}) -> + io_lib:format("'~s' substitution requires a config variable '~s' to be set", + [Substitution, Variable]); +xlate({mapping_not_found, Variable}) -> + [Variable, " not_found"]; +xlate({mapping_multiple, {Variable, {Hard, Fuzzy}}}) -> + io_lib:format("~p hard mappings and ~p fuzzy mappings found " + "for ~s", [Hard, Fuzzy, Variable]); +xlate({validation, {Variable, Description}}) -> + [Variable, " invalid, ", Description]; +xlate({erl_parse, {Reason, LineNo}}) -> + ["Schema parse error near line number ", integer_to_list(LineNo), + ": ", Reason]; +xlate({erl_parse, Reason}) -> + io_lib:format("Schema parse error: ~p", [Reason]); +xlate({erl_parse_unexpected, Error}) -> + io_lib:format("Unexpected return from erl_parse:parse_exprs/1: ~p", + [Error]); +xlate({parse_schema, Value}) -> + io_lib:format("Unknown parse return: ~p", [Value]); +xlate({erl_scan, LineNo}) -> + ["Error scanning erlang near line ", integer_to_list(LineNo)]. + +-spec contains_error(list()) -> boolean(). +contains_error(List) -> + lists:any(fun is_error/1, List). + +-spec is_error(any()) -> boolean(). +is_error({error, _}) -> true; +is_error(_) -> false. + +-spec filter(list()) -> errorlist(). +filter(List) -> + {errorlist, lists:filter(fun is_error/1, List)}. + +-spec errorlist_maybe(any()) -> any(). +errorlist_maybe(List) when is_list(List) -> + case filter(List) of + {errorlist, []} -> + List; + Errorlist -> + Errorlist + end; +errorlist_maybe(AnythingElse) -> AnythingElse. + +-spec print(string(), [any()]) -> ok. +print(FormatString, Args) -> + print(io_lib:format(FormatString, Args)). + +-spec print(string() | error()) -> ok. +print({error, ErrorTerm}) -> + print(lists:flatten(xlate(ErrorTerm))); +print(String) -> + case lager:error("~s", [String]) of + {error, lager_not_running} -> + io:format("~s~n", [String]), + ok; + ok -> ok + end. + +-ifdef(TEST). + +is_error_test() -> + ?assert(is_error({error, "oh no!"})), + ?assert(not(is_error("just an innocent string... I mean a list... I mean... argh, erlang"))), + ok. + +contains_error_test() -> + ?assert(contains_error(["hi", {error, "hi!"}, "bye"])), + ?assert(not(contains_error(["hi", "I'm not an error", "bye"]))), + ok. + +filter_test() -> + ?assertEqual({errorlist, []}, filter(["hi", "what even is an error?", "bye"])), + ?assertEqual({errorlist, [{error, "etoomanythings"}]}, + filter(["hi", {error, "etoomanythings"}, "bye"])), + ok. + +errorlist_maybe_test() -> + ?assertEqual(atom, errorlist_maybe(atom)), + ?assertEqual(12, errorlist_maybe(12)), + %% Fool you! "string" is a list!, but doesn't contain an error() + ?assertEqual("string", errorlist_maybe("string")), + + ?assertEqual( + {errorlist, [{error, "etoomanythings"}]}, + errorlist_maybe(["hi", {error, "etoomanythings"}, "bye"])), + ?assertEqual( + ["hi", "what even is an error?", "bye"], + errorlist_maybe(["hi", "what even is an error?", "bye"])), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_escript.erl b/deps/cuttlefish/src/cuttlefish_escript.erl new file mode 100644 index 0000000000000000000000000000000000000000..340a8b5578d315ce6e55013399fc43d741299573 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_escript.erl @@ -0,0 +1,534 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_escript: used by sh scripts to parse configs +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_escript). + +-define(STDOUT(Str, Args), io:format(Str ++ "~n", Args)). +-define(FORMAT(Str, Args), io_lib:format(Str, Args)). +-export([main/1]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +cli_options() -> +%% Option Name, Short Code, Long Code, Argument Spec, Help Message +[ + {help, $h, "help", undefined, "Print this usage page"}, + {etc_dir, $e, "etc_dir", {string, "/etc"}, "etc dir"}, + {dest_dir, $d, "dest_dir", string, "specifies the directory to write the config file to"}, + {dest_file, $f, "dest_file", {string, "app"}, "the file name to write"}, + {schema_dir, $s, "schema_dir", string, "a directory containing .schema files"}, + {schema_file, $i, "schema_file", string, "individual schema file, will be processed in command line order, after -s"}, + {conf_file, $c, "conf_file", string, "a cuttlefish conf file, multiple files allowed"}, + {app_config, $a, "app_config", string, "the advanced erlangy app.config"}, + {log_level, $l, "log_level", {string, "notice"}, "log level for cuttlefish output"}, + {print_schema, $p, "print", undefined, "prints schema mappings on stderr"}, + {max_history, $m, "max_history", {integer, 3}, "the maximum number of generated config files to keep"} +]. + +%% LOL! I wanted this to be halt 0, but honestly, if this escript does anything +%% except return the path to a generated config file, it should return a non-zero +%% return code +print_help() -> + getopt:usage(cli_options(), + escript:script_name()), + stop_deactivate(). + +parse_and_command(Args) -> + {ParsedArgs, Extra} = case getopt:parse(cli_options(), Args) of + {ok, {P, H}} -> {P, H}; + _ -> {[help], []} + end, + {Command, ExtraArgs} = case {lists:member(help, ParsedArgs), Extra} of + {false, []} -> {generate, []}; + {false, [Cmd|E]} -> {list_to_atom(Cmd), E}; + _ -> {help, []} + end, + {Command, ParsedArgs, ExtraArgs}. + +%% @doc main method for generating erlang term config files +main(Args) -> + _ = application:load(lager), + + {Command, ParsedArgs, Extra} = parse_and_command(Args), + + SuggestedLogLevel = list_to_atom(proplists:get_value(log_level, ParsedArgs)), + LogLevel = case lists:member(SuggestedLogLevel, [debug, info, notice, warning, error, critical, alert, emergency]) of + true -> SuggestedLogLevel; + _ -> notice + end, + + application:set_env(lager, handlers, [{lager_stderr_backend, LogLevel}]), + application:set_env(lager, crash_log, false), + lager:start(), + lager:debug("Cuttlefish set to debug level logging"), + + case Command of + help -> + print_help(); + generate -> + generate(ParsedArgs); + effective -> + effective(ParsedArgs); + describe -> + describe(ParsedArgs, Extra); + _Other -> + print_help() + end. + +%% This shows the effective configuration, including defaults +effective(ParsedArgs) -> + lager:debug("cuttlefish `effective`", []), + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + %% Should we even show this? + {AppConfigExists, ExistingAppConfigName} = check_existence(EtcDir, "app.config"), + {VMArgsExists, ExistingVMArgsName} = check_existence(EtcDir, "vm.args"), + + case {AppConfigExists, VMArgsExists} of + {false, false} -> + AdvancedConfigFile = filename:join(EtcDir, "advanced.config"), + AdvConfig = case filelib:is_file(AdvancedConfigFile) of + true -> + lager:debug("~s/advanced.config detected, overlaying proplists", [EtcDir]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + AdvancedConfig; + {error, Error} -> + lager:error("Error parsing advanced.config: ~s", [file:format_error(Error)]), + stop_deactivate() + end; + _ -> + [] + end, + + EffectiveConfig = cuttlefish_effective:build( + load_conf(ParsedArgs), + load_schema(ParsedArgs), + AdvConfig), + _ = [ ?STDOUT(Line, []) || Line <- EffectiveConfig], + ok; + _ -> + ?STDOUT("Disabling cuttlefish, legacy configuration files found:", []), + case AppConfigExists of + true -> + ?STDOUT(" ~s", [ExistingAppConfigName]); + _ -> + ok + end, + case VMArgsExists of + true -> + ?STDOUT(" ~s", [ExistingVMArgsName]); + _ -> + ok + end, + ?STDOUT("Effective config is only visible for cuttlefish conf files.", []) + end, + ok. + +%% This is the function that dumps the docs for a single setting +describe(_ParsedArgs, []) -> + %% No query, you get nothing. + ?STDOUT("cuttlefish's describe command required a variable to query.", []), + ?STDOUT("Try `describe setting.name`", []), + stop_deactivate(); +describe(ParsedArgs, [Query|_]) when is_list(Query) -> + QDef = cuttlefish_variable:tokenize(Query), + + lager:debug("cuttlefish describe '~s'", [Query]), + {_, Mappings, _} = load_schema(ParsedArgs), + + FindResults = fun(QueryVar) -> + lists:filter( + fun(X) -> + cuttlefish_variable:is_fuzzy_match(QueryVar, cuttlefish_mapping:variable(X)) + end, + Mappings) + end, + + case FindResults(QDef) of + [] -> + ?STDOUT("Variable '~s' not found", [Query]); + [Match|_] -> + ?STDOUT("Documentation for ~s", [cuttlefish_variable:format(cuttlefish_mapping:variable(Match))]), + _ = case {cuttlefish_mapping:doc(Match), cuttlefish_mapping:see(Match)} of + {[], []} -> + ok; + {[], See} -> + _ = [ begin + M = hd(FindResults(S)), + [ ?STDOUT("~s", [Line]) || Line <- cuttlefish_mapping:doc(M)] + end || S <- See], + ok; + {Docs, []} -> + [ ?STDOUT("~s", [Line]) || Line <- Docs]; + {Docs, See} -> + _ = [ ?STDOUT("~s", [Line]) || Line <- Docs], + ?STDOUT("See also:", []), + [?STDOUT(" ~s", [cuttlefish_variable:format(S)]) || S <- See] + end, + ?STDOUT("", []), + ValidValues = [ + ?FORMAT("~n - ~s", [cuttlefish_conf:pretty_datatype(Type)]) || + Type <- lists:flatten([cuttlefish_mapping:datatype(Match)]) ], + ?STDOUT(" Valid Values: ~s", [ValidValues]), + case cuttlefish_mapping:has_default(Match) of + true -> + ?STDOUT(" Default Value : ~s", + [format_datatype(cuttlefish_mapping:default(Match), + cuttlefish_mapping:datatype(Match))]); + false -> + ?STDOUT(" No default set", []) + end, + Conf = load_conf(ParsedArgs), + case lists:keyfind(QDef, 1, Conf) of + false -> + ConfFile = proplists:get_value(conf_file, ParsedArgs), + ?STDOUT(" Value not set in ~s", [ConfFile]); + {_, CValue} -> + ConfiguredValue = format_datatype(CValue, cuttlefish_mapping:datatype(Match)), + ?STDOUT(" Set Value : ~s", [ConfiguredValue]) + end, + ?STDOUT(" Internal key : ~s", [cuttlefish_mapping:mapping(Match)]) + end, + stop_deactivate(). + +-ifndef(TEST). +stop_deactivate() -> + init:stop(1), + timer:sleep(250), + stop_deactivate(). + +stop_ok() -> + init:stop(0). +-endif. + +-ifdef(TEST). +%% In test mode we don't want to kill the test VM prematurely. +stop_deactivate() -> + throw(stop_deactivate). + +stop_ok() -> + ok. +-endif. + +generate(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + {AppConfigExists, ExistingAppConfigName} = check_existence(EtcDir, "app.config"), + {VMArgsExists, ExistingVMArgsName} = check_existence(EtcDir, "vm.args"), + + %% If /etc/app.config exists, use it and disable cuttlefish + %% even though cuttlefish is awesome + FilesToUse = case {AppConfigExists, VMArgsExists} of + {true, true} -> + lager:info("~s and ~s exists, disabling cuttlefish.", [ExistingAppConfigName, ExistingVMArgsName]), + lager:info("If you'd like to know more about cuttlefish, check your local library!", []), + lager:info(" or see http://github.com/basho/cuttlefish", []), + {ExistingAppConfigName, ExistingVMArgsName}; + {true, false} -> + lager:info("~s exists, generating vm.args", [ExistingAppConfigName]), + {_, NewVMArgs} = engage_cuttlefish(ParsedArgs), + {ExistingAppConfigName, NewVMArgs}; + {false, true} -> + lager:info("~s exists, generating app.config", [ExistingVMArgsName]), + {NewAppConfig, _} = engage_cuttlefish(ParsedArgs), + {NewAppConfig, ExistingVMArgsName}; + _ -> + lager:info("No app.config or vm.args detected in ~s, activating cuttlefish", [EtcDir]), + engage_cuttlefish(ParsedArgs) + end, + + case FilesToUse of + %% this is nice and all, but currently all error paths of engage_cuttlefish end with + %% stop_deactivate() hopefully factor that to be cleaner. + error -> + stop_deactivate(); + {AppConf, VMArgs} -> + %% Note: we have added a parameter '-vm_args' to this. It appears redundant + %% but it is not! the erlang vm allows us to access all arguments to the erl + %% command EXCEPT '-args_file', so in order to get access to this file location + %% from within the vm, we need to pass it in twice. + ?STDOUT(" -config ~s -args_file ~s -vm_args ~s ", [AppConf, VMArgs, VMArgs]), + stop_ok() + end. + +load_schema(ParsedArgs) -> + SchemaDir = proplists:get_value(schema_dir, ParsedArgs), + + SchemaDirFiles = case SchemaDir of + undefined -> []; + _ -> [ filename:join(SchemaDir, Filename) || Filename <- filelib:wildcard("*.schema", SchemaDir)] + end, + IndividualSchemaFiles = proplists:get_all_values(schema_file, ParsedArgs), + SchemaFiles = SchemaDirFiles ++ IndividualSchemaFiles, + + SortedSchemaFiles = lists:sort(fun(A,B) -> A < B end, SchemaFiles), + case length(SortedSchemaFiles) of + 0 -> + lager:debug("No Schema files found in specified", []), + stop_deactivate(); + _ -> + lager:debug("SchemaFiles: ~p", [SortedSchemaFiles]) + end, + + Schema = cuttlefish_schema:files(SortedSchemaFiles), + case proplists:is_defined(print_schema, ParsedArgs) of + true -> + _ = print_schema(Schema), + Schema; + _ -> + Schema + end. + +load_conf(ParsedArgs) -> + ConfFiles = proplists:get_all_values(conf_file, ParsedArgs), + lager:debug("ConfFiles: ~p", [ConfFiles]), + case cuttlefish_conf:files(ConfFiles) of + {errorlist, Errors} -> + _ = [ lager:error(cuttlefish_error:xlate(E)) || + {error, E} <- Errors], + stop_deactivate(), + {errorlist, Errors}; + GoodConf -> + GoodConf + end. + +-spec writable_destination_path([proplists:property()]) -> file:filename() | error. +writable_destination_path(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + DestinationPath = proplists:get_value(dest_dir, ParsedArgs, filename:join(EtcDir, "generated")), + AbsoluteDestPath = case DestinationPath of + [$/|_] -> DestinationPath; + _ -> filename:join(element(2,file:get_cwd()), DestinationPath) + end, + %% Check Permissions + case filelib:ensure_dir(filename:join(AbsoluteDestPath, "weaksauce.dummy")) of + %% filelib:ensure_dir/1 requires a dummy filename in the argument, + %% I think that is weaksauce, hence "weaksauce.dummy" + ok -> + AbsoluteDestPath; + {error, E} -> + lager:error( + "Error creating ~s: ~s", + [AbsoluteDestPath, file:format_error(E)]), + error + end. + +-spec engage_cuttlefish([proplists:property()]) -> {string(), string()} | error. +engage_cuttlefish(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + AbsPath = case writable_destination_path(ParsedArgs) of + error -> + stop_deactivate(), + error; + Path -> Path + end, + + Date = calendar:local_time(), + + DestinationFilename = filename_maker(proplists:get_value(dest_file, ParsedArgs), Date, "config"), + Destination = filename:join(AbsPath, DestinationFilename), + + DestinationVMArgsFilename = filename_maker("vm", Date, "args"), + DestinationVMArgs = filename:join(AbsPath, DestinationVMArgsFilename), + + lager:debug("Generating config in: ~p", [Destination]), + + Schema = load_schema(ParsedArgs), + + Conf = load_conf(ParsedArgs), + NewConfig = case cuttlefish_generator:map(Schema, Conf) of + {error, Phase, {errorlist, Errors}} -> + lager:error("Error generating configuration in phase ~s", [Phase]), + _ = [ cuttlefish_error:print(E) || E <- Errors], + stop_deactivate(); + ValidConfig -> ValidConfig + end, + + AdvancedConfigFile = filename:join(EtcDir, "advanced.config"), + FinalConfig = case filelib:is_file(AdvancedConfigFile) of + true -> + lager:info("~s/advanced.config detected, overlaying proplists", [EtcDir]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(NewConfig, AdvancedConfig); + {ok, OtherTerms} -> + lager:error("Error parsing ~s, incorrect format: ~p", [AdvancedConfigFile, OtherTerms]), + stop_deactivate(); + {error, Error} -> + lager:error("Error parsing ~s: ~s", [AdvancedConfigFile, file:format_error(Error)]), + stop_deactivate() + end; + _ -> + %% Nothing to see here, these aren't the droids you're looking for. + NewConfig + end, + + case FinalConfig of + {error, _X} -> + error; + _ -> + FinalAppConfig = proplists:delete(vm_args, FinalConfig), + FinalVMArgs = cuttlefish_vmargs:stringify(proplists:get_value(vm_args, FinalConfig)), + + %% Prune excess files + MaxHistory = proplists:get_value(max_history, ParsedArgs, 3) - 1, + prune(Destination, MaxHistory), + prune(DestinationVMArgs, MaxHistory), + + case { file:write_file(Destination, io_lib:fwrite("~p.\n",[FinalAppConfig])), + file:write_file(DestinationVMArgs, string:join(FinalVMArgs, "\n"))} of + {ok, ok} -> + {Destination, DestinationVMArgs}; + {Err1, Err2} -> + maybe_log_file_error(Destination, Err1), + maybe_log_file_error(DestinationVMArgs, Err2), + error + end + + end. + +-spec prune(file:name_all(), integer()) -> ok. +prune(Filename, MaxHistory) -> + %% A Filename comes in /Abs/Path/To/something.YYYY.MM.DD.HH.mm.SS.ext + %% We want `ls /Abs/Path/To/something.*.ext and delete all but the most + %% recent MaxHistory + Path = filename:dirname(Filename), + Ext = filename:extension(Filename), + Base = hd(string:tokens(filename:basename(Filename, Ext), ".")), + Files = + lists:sort(filelib:wildcard(Base ++ ".*" ++ Ext, Path)), + + delete([ filename:join([Path, F]) || F <- Files], MaxHistory), + ok. + +-spec delete(file:name_all(), integer()) -> ok. +delete(Files, MaxHistory) when length(Files) =< MaxHistory -> + ok; +delete([File|Files], MaxHistory) -> + case file:delete(File) of + ok -> ok; + {error, Reason} -> + lager:error("Could not delete ~s, ~p", [File, Reason]) + end, + delete(Files, MaxHistory). + +-spec maybe_log_file_error( + file:filename(), ok | + {error, file:posix() %% copied from file:format_error/1 + | badarg + | terminated + | system_limit + | { integer(), module(), term() }}) -> ok. +maybe_log_file_error(_, ok) -> + ok; +maybe_log_file_error(Filename, {error, Reason}) -> + lager:error("Error writing ~s: ~s", [Filename, file:format_error(Reason)]), + ok. + +-spec check_existence(string(), string()) -> {boolean(), string()}. +check_existence(EtcDir, Filename) -> + FullName = filename:join(EtcDir, Filename), %% Barfolomew + Exists = filelib:is_file(FullName), + lager:info("Checking ~s exists... ~p", [FullName, Exists]), + {Exists, FullName}. + +filename_maker(Filename, Date, Extension) -> + {{Y, M, D}, {HH, MM, SS}} = Date, + _DestinationFilename = + io_lib:format("~s.~p.~s.~s.~s.~s.~s.~s", + [Filename, + Y, + zero_pad(M), + zero_pad(D), + zero_pad(HH), + zero_pad(MM), + zero_pad(SS), + Extension + ]). + +zero_pad(Integer) -> + S = integer_to_list(Integer), + case Integer > 9 of + true -> S; + _ -> [$0|S] + end. + +print_schema(Schema) -> + lager:info("Printing Schema Mappings"), + {_, Mappings, _} = Schema, + + {Max, ListOfMappings} = lists:foldr( + fun(M, {OldMax, List}) -> + CandidateMax = length(cuttlefish_mapping:mapping(M)), + NewMax = case CandidateMax > OldMax of + true -> CandidateMax; + _ -> OldMax + end, + {NewMax, [{cuttlefish_mapping:mapping(M), cuttlefish_variable:format(cuttlefish_mapping:variable(M))}|List]} + end, + {0, []}, + Mappings + ), + [ + io:format(standard_error, "~s ~s~n", + [string:left(M, Max+2, $\s), V]) + || {M, V} <- ListOfMappings]. + +format_datatype(Value, Datatypes) when is_list(Datatypes) -> + %% We're not sure which datatype the default or set value is going + %% to match, so let's find one that does. + [H|_] = lists:dropwhile( + fun(D0) -> + D = cuttlefish_datatypes:extended_from(D0), + case cuttlefish_datatypes:from_string(Value, D) of + {error, _} -> true; + _ -> false + end + end, Datatypes), + format_datatype(Value, cuttlefish_datatypes:extended_from(H)); +format_datatype(Value, Datatype) -> + cuttlefish_datatypes:to_string(cuttlefish_datatypes:from_string(Value, Datatype), Datatype). + + +-ifdef(TEST). + +zero_pad_test() -> + ?assertEqual("00", zero_pad(0)), + ?assertEqual("01", zero_pad(1)), + ?assertEqual("02", zero_pad(2)), + ?assertEqual("03", zero_pad(3)), + ?assertEqual("04", zero_pad(4)), + ?assertEqual("05", zero_pad(5)), + ?assertEqual("06", zero_pad(6)), + ?assertEqual("07", zero_pad(7)), + ?assertEqual("08", zero_pad(8)), + ?assertEqual("09", zero_pad(9)), + ?assertEqual("10", zero_pad(10)), + ?assertEqual("11", zero_pad(11)), + ?assertEqual("12", zero_pad(12)), + ok. + + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_flag.erl b/deps/cuttlefish/src/cuttlefish_flag.erl new file mode 100644 index 0000000000000000000000000000000000000000..c37ce153a2e5a36c27afa3bb6085d0500f9ebf7b --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_flag.erl @@ -0,0 +1,93 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_flag: datatype for simple boolean settings with +%% customizable names and values +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_flag). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + parse/1, + parse/2, + to_string/2 + ]). + +-define(FMT(F, A), lists:flatten(io_lib:format(F, A))). + +parse(Value) -> + cuttlefish_enum:parse(Value, to_enum(flag)). +parse(Value, Flag) -> + cuttlefish_enum:parse(Value, to_enum(Flag)). + +to_string(Value, Flag) -> + cuttlefish_enum:to_string(Value, to_enum(Flag)). + +to_enum({flag, {On, OnValue}, {Off, OffValue}}) -> + {enum, [{On, OnValue}, {Off, OffValue}]}; +to_enum({flag, On, Off}) -> + {enum, [{On, true}, {Off, false}]}; +to_enum(flag) -> + {enum, [{on, true}, {off, false}]}. + +-ifdef(TEST). +parse_test() -> + ?assertEqual(true, parse("on")), + ?assertEqual(false, parse("off")), + ?assertEqual(true, parse("enabled", {flag, enabled, disabled})), + ?assertEqual(false, parse("disabled", {flag, enabled, disabled})), + ?assertEqual(tyk, parse("on", {flag, {on, tyk}, {off, torp}})), + ?assertEqual(torp, parse("off", {flag, {on, tyk}, {off, torp}})), + ?assertEqual({long, tuple, value}, + parse("foo", {flag, {simple, ok}, + {foo, {long, tuple, value}}})), + ?assertEqual(ok, + parse("simple", {flag, {simple, ok}, + {foo, {long, tuple, value}}})). + +to_string_test() -> + ?assertEqual(to_string(true, flag), "on"), + ?assertEqual(to_string(on, flag), "on"), + ?assertEqual(to_string(false, flag), "off"), + ?assertEqual(to_string(off, flag), "off"), + ?assertEqual(to_string(true, {flag, enabled, disabled}), "enabled"), + ?assertEqual(to_string(enabled, {flag, enabled, disabled}), "enabled"), + ?assertEqual(to_string(false, {flag, enabled, disabled}), "disabled"), + ?assertEqual(to_string(disabled, {flag, enabled, disabled}), "disabled"), + ?assertEqual(to_string(tyk, {flag, {on, tyk}, {off, torp}}), "on"), + ?assertEqual(to_string(on, {flag, {on, tyk}, {off, torp}}), "on"), + ?assertEqual(to_string(torp, {flag, {on, tyk}, {off, torp}}), "off"), + ?assertEqual(to_string(off, {flag, {on, tyk}, {off, torp}}), "off"), + ?assertEqual(to_string({long, tuple, value}, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "foo"), + ?assertEqual(to_string(foo, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "foo"), + ?assertEqual(to_string(ok, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "simple"), + ?assertEqual(to_string(simple, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "simple"). +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_generator.erl b/deps/cuttlefish/src/cuttlefish_generator.erl new file mode 100644 index 0000000000000000000000000000000000000000..3016302ec1cd4c953bdb3bce2a20f1e03d6e5a91 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_generator.erl @@ -0,0 +1,1218 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_generator: this is where the action is +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_generator). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-define(LSUB, "$("). +-define(RSUB, ")"). +-define(LSUBLEN, 2). +-define(RSUBLEN, 1). + +-export([map/2, find_mapping/2, add_defaults/2, minimal_map/2]). + +-spec map(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map(Schema, Config) -> + map_add_defaults(Schema, Config). + +%% @doc Generates an Erlang config that only includes the settings +%% encompassed by the passed Config, excluding defaults from the +%% schema for unspecified settings. +-spec minimal_map(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | {error, atom(), cuttlefish_error:errorlist()}. +minimal_map({AllTranslations,AllMappings,V}, Config) -> + ConfigKeys = sets:from_list([K || {K, _} <- Config]), + {RestrictedMappings, MappingKeys} = lists:foldr(fun(M,Acc) -> + restrict_mappings(M, Acc, ConfigKeys) + end, {[], sets:new()}, AllMappings), + RestrictedTranslations = [ T || T <- AllTranslations, + sets:is_element(cuttlefish_translation:mapping(T), MappingKeys)], + map({RestrictedTranslations,RestrictedMappings,V}, Config). + +restrict_mappings(M, {Mappings, Keys}, ConfigKeys) -> + case sets:is_element(cuttlefish_mapping:variable(M), ConfigKeys) of + true -> + {[M|Mappings], sets:add_element(cuttlefish_mapping:mapping(M), Keys)}; + false -> + {Mappings, Keys} + end. + +-spec map_add_defaults(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_add_defaults({_, Mappings, _} = Schema, Config) -> + %% Config at this point is just what's in the .conf file. + %% add_defaults/2 rolls the default values in from the schema + lager:debug("Adding Defaults"), + DConfig = add_defaults(Config, Mappings), + case cuttlefish_error:errorlist_maybe(DConfig) of + {errorlist, EList} -> + {error, add_defaults, {errorlist, EList}}; + _ -> + map_value_sub(Schema, DConfig) + end. + +-spec map_value_sub(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_value_sub(Schema, Config) -> + lager:debug("Right Hand Side Substitutions"), + case value_sub(Config) of + {SubbedConfig, []} -> + map_transform_datatypes(Schema, SubbedConfig); + {_, EList} -> + {error, rhs_subs, {errorlist, EList}} + end. + +-spec map_transform_datatypes(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_transform_datatypes({_, Mappings, _} = Schema, DConfig) -> + %% Everything in DConfig is of datatype "string", + %% transform_datatypes turns them into other erlang terms + %% based on the schema + lager:debug("Applying Datatypes"), + case transform_datatypes(DConfig, Mappings) of + {NewConf, []} -> + map_validate(Schema, NewConf); + {_, EList} -> + {error, transform_datatypes, {errorlist, EList}} + end. + +-spec map_validate(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_validate(Schema, Conf) -> + %% Any more advanced validators + lager:debug("Validation"), + case cuttlefish_error:errorlist_maybe(run_validations(Schema, Conf)) of + {errorlist, EList} -> + {error, validation, {errorlist, EList}}; + true -> + {DirectMappings, TranslationsToDrop} = apply_mappings(Schema, Conf), + apply_translations(Schema, Conf, DirectMappings, TranslationsToDrop) + end. + +-spec apply_mappings(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + {[proplists:property()], [string()]}. +apply_mappings({Translations, Mappings, _Validators}, Conf) -> + %% This fold handles 1:1 mappings, that have no cooresponding translations + %% The accumlator is the app.config proplist that we start building from + %% these 1:1 mappings, hence the return "DirectMappings". + %% It also builds a list of "TranslationsToDrop". It's basically saying that + %% if a user didn't actually configure this setting in the .conf file and + %% there's no default in the schema, then there won't be enough information + %% during the translation phase to succeed, so we'll earmark it to be skipped + {DirectMappings, {TranslationsToMaybeDrop, TranslationsToKeep}} = lists:foldr( + fun(MappingRecord, {ConfAcc, {MaybeDrop, Keep}}) -> + Mapping = cuttlefish_mapping:mapping(MappingRecord), + Default = cuttlefish_mapping:default(MappingRecord), + Variable = cuttlefish_mapping:variable(MappingRecord), + case { + Default =/= undefined orelse cuttlefish_conf:is_variable_defined(Variable, Conf), + lists:any( + fun(T) -> + cuttlefish_translation:mapping(T) =:= Mapping + end, + Translations) + } of + {true, false} -> + Tokens = cuttlefish_variable:tokenize(Mapping), + NewValue = proplists:get_value(Variable, Conf), + {set_value(Tokens, ConfAcc, NewValue), + {MaybeDrop, ordsets:add_element(Mapping,Keep)}}; + {true, true} -> + {ConfAcc, {MaybeDrop, ordsets:add_element(Mapping,Keep)}}; + _ -> + {ConfAcc, {ordsets:add_element(Mapping,MaybeDrop), Keep}} + end + end, + {[], {ordsets:new(),ordsets:new()}}, + Mappings), + lager:debug("Applied 1:1 Mappings"), + + TranslationsToDrop = TranslationsToMaybeDrop -- TranslationsToKeep, + {DirectMappings, TranslationsToDrop}. + +-spec apply_translations(cuttlefish_schema:schema(), cuttlefish_conf:conf(), [proplists:property()], [string()]) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +apply_translations({Translations, _, _} = Schema, Conf, DirectMappings, TranslationsToDrop) -> + %% The fold handles the translations. After we've build the DirectMappings, + %% we use that to seed this fold's accumulator. As we go through each translation + %% we write that to the `app.config` that lives in the accumutator. + {Proplist, Errorlist} = lists:foldl(fold_apply_translation(Conf, Schema, TranslationsToDrop), + {DirectMappings, []}, Translations), + case Errorlist of + [] -> + lager:debug("Applied Translations"), + Proplist; + Es -> + {error, apply_translations, {errorlist, Es}} + end. + + +fold_apply_translation(Conf, Schema, TranslationsToDrop) -> + fun(TranslationRecord, {Acc, Errors}) -> + Mapping = cuttlefish_translation:mapping(TranslationRecord), + Xlat = cuttlefish_translation:func(TranslationRecord), + case lists:member(Mapping, TranslationsToDrop) of + false -> + {XlatFun, XlatArgs} = prepare_translation_fun(Conf, Schema, + Mapping, Xlat), + lager:debug("Running translation for ~s", [Mapping]), + case try_apply_translation(Mapping, XlatFun, XlatArgs) of + unset -> + {Acc, Errors}; + {set, NewValue} -> + {set_value(cuttlefish_variable:tokenize(Mapping), Acc, NewValue), Errors}; + {error, Term} -> + {Acc, [{error, Term}|Errors]} + end; + _ -> + lager:debug("~p in Translations to drop...", [Mapping]), + {Acc, Errors} + end + end. + +prepare_translation_fun(Conf, Schema, Mapping, Xlat) -> + case proplists:get_value(arity, erlang:fun_info(Xlat)) of + 1 -> {Xlat, [Conf]}; + 2 -> {Xlat, [Conf, Schema]}; + OtherArity -> + {fun(_) -> + {error, {translation_arity, {Mapping, OtherArity}}} + end, error} + end. + +try_apply_translation(Mapping, XlatFun, XlatArgs) -> + try erlang:apply(XlatFun, XlatArgs) of + {ok, Value} -> + {set, Value}; + X -> + {set, X} + catch + %% cuttlefish:conf_get/2 threw not_found + throw:{not_found, NotFound} -> + {error, {translation_missing_setting, + {Mapping, cuttlefish_variable:format(NotFound)}}}; + %% For explicitly omitting an output setting. + %% See cuttlefish:unset/0 + throw:unset -> + unset; + %% For translations that found invalid + %% settings, even after mapping. See + %% cuttlefish:invalid/1. + throw:{invalid, Invalid} -> + {error, {translation_invalid_configuration, + {Mapping, Invalid}}}; + %% Any unknown error, perhaps caused by stdlib + %% stuff. + E:R -> + {error, {translation_unknown_error, + {Mapping, {E, R}}}} + end. + +%for each token, is it special? +% +%if yes, special processing +%if no, recurse into this with the value from the proplist and tail of tokens +% +%unless the tail of tokens is [] + +%% This is the last token, so things ends with replacing the proplist value. +set_value([LastToken], Acc, NewValue) -> + cuttlefish_util:replace_proplist_value(list_to_atom(LastToken), NewValue, Acc); +%% This is the case of all but the last token. +%% recurse until you hit a leaf. +set_value([HeadToken|MoreTokens], PList, NewValue) -> + Token = list_to_atom(HeadToken), + OldValue = proplists:get_value(Token, PList, []), + cuttlefish_util:replace_proplist_value( + Token, + set_value(MoreTokens, OldValue, NewValue), + PList). + +%% @doc adds default values from the schema when something's not +%% defined in the Conf, to give a complete app.config +add_defaults(Conf, Mappings) -> + Prefixes = get_possible_values_for_fuzzy_matches(Conf, Mappings), + + lists:foldl( + fun(MappingRecord, Acc) -> + case cuttlefish_mapping:has_default(MappingRecord) of + false -> Acc; + true -> add_default(Conf, Prefixes, MappingRecord, Acc) + end + end, + Conf, Mappings). + +add_default(Conf, Prefixes, MappingRecord, Acc) -> + Default = cuttlefish_mapping:default(MappingRecord), + VariableDef = cuttlefish_mapping:variable(MappingRecord), + IsFuzzyMatch = cuttlefish_mapping:is_fuzzy_variable(MappingRecord), + IsStrictMatch = lists:keymember(VariableDef, 1, Conf), + + %% No, then plug in the default + case {IsStrictMatch, IsFuzzyMatch} of + %% Strict match means we have the setting already + {true, false} -> Acc; + + %% If IsStrictMatch =:= false, IsFuzzyMatch =:= true, we've got a setting, but + %% it's part of a complex data structure. + {false, true} -> + add_fuzzy_default(Prefixes, Acc, Default, VariableDef); + + %% If Match =:= FuzzyMatch =:= false, use the default, key not set in .conf + {false, false} -> [{VariableDef, Default}|Acc]; + + %% If Match =:= true, do nothing, the value is set in the .conf file + _ -> + %% TODO: Handle with more style and grace + lager:error("Both fuzzy and strict match! should not happen"), + [{error, {map_multiple_match, VariableDef}}|Acc] + end. + +is_strict_prefix([H|T1], [H|T2]) -> + is_strict_prefix(T1, T2); +is_strict_prefix([], [H2|_]) when hd(H2) =:= $$ -> + true; +is_strict_prefix(_, _) -> + false. + +add_fuzzy_default(Prefixes, Conf, Default, VariableDef) -> + PotentialMatch = lists:dropwhile(fun({Prefix, _}) -> + not is_strict_prefix(Prefix, VariableDef) + end, Prefixes), + case PotentialMatch of + %% None of the prefixes match, so we don't generate a default. + [] -> Conf; + [{_Prefix, Substitutions}|_] -> + %% This means that we found the key. + %% ToAdd will be the list of all the things we're adding to the defaults. + %% So, let's say you have the following mappings defined: + %% namespace.$named_thing.a + %% namespace.$named_thing.b + %% namespace.$named_thing.c + + %% and in your conf, you defined the following: + %% namespace.strong_bad.a = 10 + %% namespace.senor_cardgage.b = percent_sign + %% namespace.trogdor.c = burninate + + %% Well, Prefixes would look like this: + %% [{"namespace", ["strong_bad", "senor_cardgage", "trogdor"]}] + + %% The ToAdd list comp is going through and saying: ok, I know there are + %% defaults for namespace.$named_thing.a, b, and c. And I know the possible + %% values of $named_thing are strong_bad, senor_cardgage, and trogdor. + %% so I want to ensure that there are values for the following: + %% + %% namespace.strong_bad.a + %% namespace.strong_bad.b + %% namespace.strong_bad.c + %% namespace.senor_cardgage.a + %% namespace.senor_cardgage.b + %% namespace.senor_cardgage.c + %% namespace.trogdor.a + %% namespace.trogdor.b + %% namespace.trogdor.c + + %% So, we go through the List of possible substitutions + %% and apply the substitution to the variable. If it + %% already exists in the Conf, then we skip it, otherwise + %% we include the Default value. + ToAdd = [ {VariableToAdd, Default} + || Subst <- Substitutions, + VariableToAdd <- [cuttlefish_variable:replace_match(VariableDef, Subst)], + not lists:keymember(VariableToAdd, 1, Conf)], + Conf ++ ToAdd + end. + +%%%%%%%%%%%%%%%%%%%%%%%% +%% Prefixes is the thing we need for defaults of named keys +%% it looks like this: +%% +%% Prefixes: [{"riak_control.user",["user"]}, +%% {"listener.https",["internal"]}, +%% {"listener.protobuf",["internal"]}, +%% {"listener.http",["internal"]}, +%% {"multi_backend", +%% ["bitcask_mult","leveldb_mult","leveldb_mult2","memory_mult"}] +%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_possible_values_for_fuzzy_matches(cuttlefish_conf:conf(), [cuttlefish_mapping:mapping()]) -> [{string(), [string()]}]. +get_possible_values_for_fuzzy_matches(Conf, Mappings) -> + %% Now, get all the variables that could match, i.e. all the names + %% it found referenced in the Conf proplist. It may look something + %% like this: [{"n",["ck","ak","bk"]}] + lists:foldl( + fun(Mapping, FuzzyMatches) -> + case cuttlefish_mapping:is_fuzzy_variable(Mapping) of + false -> FuzzyMatches; %% Strict match + true -> + %% Fuzzy match, extract the matching settings from the conf + VD = cuttlefish_mapping:variable(Mapping), + ListOfVars = [Var || {_, Var} <- cuttlefish_variable:fuzzy_matches(VD, Conf)], + {Prefix, _, _} = cuttlefish_variable:split_on_match(VD), + orddict:append_list(Prefix, ListOfVars, FuzzyMatches) + end + end, + orddict:new(), + Mappings). + +-spec transform_datatypes( + cuttlefish_conf:conf(), + [cuttlefish_mapping:mapping()] + ) -> {cuttlefish_conf:conf(), [cuttlefish_error:error()]}. +transform_datatypes(Conf, Mappings) -> + lists:foldl( + fun({Variable, Value}, {Acc, ErrorAcc}) -> + %% Look up mapping from schema + case find_mapping(Variable, Mappings) of + {error, _} -> + %% So, this error message isn't so performant (s/o @argv0) + %% but it shouldn't happen too often, and I think it's important + %% to give users this feedback. + + %% It will prevent anything from starting, and will let you know + %% that you're trying to set something that has no effect + VarName = cuttlefish_variable:format(Variable), + lager:error("You've tried to set ~s, but there is no setting with that name.", [VarName]), + lager:error(" Did you mean one of these?"), + + Possibilities = [ begin + MapVarName = cuttlefish_variable:format(cuttlefish_mapping:variable(M)), + {cuttlefish_util:levenshtein(VarName, MapVarName), MapVarName} + end || M <- Mappings], + Sorted = lists:sort(Possibilities), + _ = [ lager:error(" ~s", [T]) || {_, T} <- lists:sublist(Sorted, 3) ], + {Acc, [ {error, {unknown_variable, VarName}} | ErrorAcc ]}; + MappingRecord -> + DTs = cuttlefish_mapping:datatype(MappingRecord), + + %% DTs is a list now, which means we'll receive an + %% errorlist, not a single error + case transform_type(DTs, Value) of + {ok, NewValue} -> + {[{Variable, NewValue}|Acc], ErrorAcc}; + {errorlist, EList} -> + NewError = {transform_type, + cuttlefish_variable:format(Variable)}, + {Acc, [{error, NewError}] ++ EList ++ ErrorAcc} + end + end + end, + {[], []}, + Conf). + +-spec value_sub(cuttlefish_conf:conf()) -> {cuttlefish_conf:conf(), [cuttlefish_error:error()]}. +value_sub(Conf) -> + lists:foldr( + fun({Var, Val}, {Acc, ErrorAcc}) -> + case value_sub(Var, Val, Conf) of + {error, _E} = Error -> {Acc, [Error|ErrorAcc]}; + {NewVal, _NewConf} -> {[{Var, NewVal}|Acc], ErrorAcc} + end + end, + {[],[]}, + Conf). + +-spec value_sub(cuttlefish_variable:variable(), + string(), + cuttlefish_conf:conf()) -> + {string(), cuttlefish_conf:conf()} | cuttlefish_error:error(). +value_sub(Var, Value, Conf) -> + value_sub(Var, Value, Conf, []). + +-spec value_sub(cuttlefish_variable:variable(), + string(), + cuttlefish_conf:conf(), + [string()]) -> + {string(), cuttlefish_conf:conf()} | cuttlefish_error:error(). +value_sub(Var, Value, Conf, History) when is_list(Value) -> + %% Check if history contains duplicates. if so error + case erlang:length(History) == sets:size(sets:from_list(History)) of + false -> + {error, {circular_rhs, History}}; + _ -> + case head_sub(Value) of + none -> {Value, Conf}; + {sub, NextVar, {SubFront, SubBack}} -> + case proplists:get_value(NextVar, Conf) of + undefined -> + {error, {substitution_missing_config, + {cuttlefish_variable:format(Var), + cuttlefish_variable:format(NextVar)}}}; + SubVal -> + %% Do a sub-subsitution, in case the substituted + %% value contains substitutions itself. Do this as + %% its own seperate recursion so that circular + %% subtitutions can be detected. + case value_sub(NextVar, SubVal, Conf, [Var|History]) of + {error, _} = Error -> + Error; + {NewSubVal, NewConf} -> + NewValue = SubFront ++ NewSubVal ++ SubBack, + value_sub(Var, NewValue, NewConf, History) + end + end + end + end; +value_sub(_Var, Value, Conf, _History) -> + {Value, Conf}. + +-spec head_sub(string()) -> none | {sub, cuttlefish_variable:variable(), {string(), string()}}. +head_sub(Value) -> + L = string:str(Value, ?LSUB), + case L > 0 of + false -> + none; + _ -> + R = string:str(string:substr(Value, L + ?RSUBLEN), ?RSUB) + L, + case L < R of + false -> + none; + _ -> + Var = cuttlefish_variable:tokenize(string:strip(string:substr(Value, L+?LSUBLEN, R-L-?LSUBLEN))), + Front = string:substr(Value, 1, L-1), + Back = string:substr(Value, R+?RSUBLEN), + {sub, Var, {Front, Back}} + end + end. + +%% If transform_type takes a list as first argument, foldm_either will +%% give us back an errorlist for a single error +-spec transform_type(cuttlefish_datatypes:datatype_list() | cuttlefish_datatypes:datatype(), term()) -> + {ok, term()} | cuttlefish_error:error() | cuttlefish_error:errorlist(). +transform_type(DTs, Value) when is_list(DTs) -> + foldm_either(fun(DT) -> transform_type(DT, Value) end, DTs); + +transform_type(DT, Value) -> + Supported = cuttlefish_datatypes:is_supported(DT), + Extended = cuttlefish_datatypes:is_extended(DT), + if + Supported -> transform_supported_type(DT, Value); + Extended -> transform_extended_type(DT, Value); + true -> + {error, {unsupported_type, DT}} + end. + +-spec transform_supported_type(cuttlefish_datatypes:datatype(), any()) -> + {ok, term()} | cuttlefish_error:error(). +transform_supported_type(DT, Value) -> + try cuttlefish_datatypes:from_string(Value, DT) of + {error, Message} -> {error, Message}; + NewValue -> {ok, NewValue} + catch + Class:Error -> + {error, {transform_type_exception, {DT, {Class, Error}}}} + end. + +-spec transform_extended_type(cuttlefish_datatypes:extended(), any()) -> + {ok, term()} | cuttlefish_error:error(). +transform_extended_type({DT, AcceptableValue}, Value) -> + case transform_supported_type(DT, Value) of + {ok, AcceptableValue} -> + {ok, AcceptableValue}; + {ok, _NewValue} -> + {error, {transform_type_unacceptable, {Value, AcceptableValue}}}; + {error, Term} -> + {error, Term} + end. +%% Ok, this is tricky +%% There are three scenarios we have to deal with: +%% 1. The mapping is there! -> return mapping +%% 2. The mapping is not there -> error +%% 3. The mapping is there, but the key in the schema contains a $. +%% (fuzzy match) +find_mapping([H|_]=Variable, Mappings) when is_list(H) -> + {HardMappings, FuzzyMappings} = lists:foldl( + fun(Mapping, {HM, FM}) -> + VariableDef = cuttlefish_mapping:variable(Mapping), + case {Variable =:= VariableDef, cuttlefish_variable:is_fuzzy_match(Variable, VariableDef)} of + {true, _} -> {[Mapping|HM], FM}; + {_, true} -> {HM, [Mapping|FM]}; + _ -> {HM, FM} + end + end, + {[], []}, + Mappings), + + %% The input to this function is massaged enough that you'll never see a hard mapping count > 1 + %% You might see more than one fuzzy match, there's really nothing to stop that. + FVariable = cuttlefish_variable:format(Variable), + case {length(HardMappings), length(FuzzyMappings)} of + {1, _} -> hd(HardMappings); + {0, 1} -> hd(FuzzyMappings); + {0, 0} -> {error, {mapping_not_found, FVariable}}; + {X, Y} -> {error, {mapping_multiple, {FVariable, {X, Y}}}} + end; +find_mapping(Variable, Mappings) -> + find_mapping(cuttlefish_variable:tokenize(Variable), Mappings). + +-spec run_validations(cuttlefish_schema:schema(), cuttlefish_conf:conf()) + -> boolean()|list(cuttlefish_error:error()). +run_validations({_, Mappings, Validators}, Conf) -> + Validations = lists:flatten([ begin + Vs = cuttlefish_mapping:validators(M, Validators), + Value = proplists:get_value(cuttlefish_mapping:variable(M), Conf), + [ begin + Validator = cuttlefish_validator:func(V), + case {Value, Validator(Value)} of + {undefined, _} -> true; + {_, true} -> + true; + _ -> + Error = {validation, { cuttlefish_variable:format( + cuttlefish_mapping:variable(M)), + cuttlefish_validator:description(V) + }}, + lager:error(cuttlefish_error:xlate(Error)), + {error, Error} + end + end || V <- Vs] + + end || M <- Mappings, + cuttlefish_mapping:validators(M) =/= [], + cuttlefish_mapping:default(M) =/= undefined orelse proplists:is_defined(cuttlefish_mapping:variable(M), Conf) + ]), + case lists:all(fun(X) -> X =:= true end, Validations) of + true -> true; + _ -> Validations + end. + + +%% @doc Calls Fun on each element of the list until it returns {ok, +%% term()}, otherwise accumulates {error, term()} into a list, +%% wrapping in {error, _} at the end. +-spec foldm_either(fun((term()) -> + {ok, term()} | cuttlefish_error:errorlist()), + list()) -> + {ok, term()} | cuttlefish_error:errorlist(). +foldm_either(Fun, List) -> + foldm_either(Fun, List, []). + +%% @doc Calls Fun on each element of the list until it returns {ok, +%% term()}, otherwise accumulates {error, term()} into a list, +%% wrapping in {errorlist, _} at the end. +-spec foldm_either(fun((term()) -> + {ok, term()} | cuttlefish_error:error()), + list(), list()) -> + {ok, term()} | cuttlefish_error:errorlist(). +foldm_either(_Fun, [], Acc) -> {errorlist, lists:reverse(Acc)}; +foldm_either(Fun, [H|T], Acc) -> + case Fun(H) of + {ok, Result} -> {ok, Result}; + {error, _}=Error -> + foldm_either(Fun, T, [Error|Acc]) + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +bad_conf_test() -> + Conf = [ + {["integer_thing"], "thirty_two"}, + {["enum_thing"], bad_enum_value}, + {["ip_thing"], "not an IP address"} + ], + + Mappings = [ + cuttlefish_mapping:parse({mapping, "integer_thing", "to.int", [ + {datatype, integer} + ]}), + cuttlefish_mapping:parse({mapping, "enum_thing", "to.enum", [ + {datatype, {enum, [on, off]}} + ]}), + cuttlefish_mapping:parse({mapping, "ip_thing", "to.ip", [ + {datatype, ip} + ]}) + ], + + Translations = [ + cuttlefish_translation:parse({translation, "to.enum", fun(_ConfConf) -> whatev end}) + ], + + NewConfig = map({Translations, Mappings, []}, Conf), + io:format("NewConf: ~p~n", [NewConfig]), + + ?assertMatch({error, transform_datatypes, _}, NewConfig), + ok. + +add_defaults_test() -> + %%lager:start(), + Conf = [ + %%{["a","b","c"], "override"}, %% Specifically left out. Uncomment line to break test, + {["a","c","d"], "override"}, + {["no","match"], "unchanged"}, + %%{"m.rk.x", "defined"}, %% since this is undefined no defaults should be created for "m", + + %% two matches on a name "ak" and "bk" + {["n","ak","x"], "set_n_name_x"}, + {["n","bk","x"], "set_n_name_x2"}, + {["n","ck","y"], "set_n_name_y3"} + ], + + Mappings = [ + %% First mapping, direct, not in .conf, will be default + cuttlefish_mapping:parse({mapping, "a.b.c", "b.c", [ + {default, "q"} + ]}), + %% default is "l", but since "a.c.d" is in Conf, it will be "override" + cuttlefish_mapping:parse({mapping, "a.c.d", "c.d", [ + {default, "l"} + ]}), + cuttlefish_mapping:parse({mapping, "m.$name.x", "some.proplist", [ + {default, "m_name_x"} + ]}), + cuttlefish_mapping:parse({mapping, "n.$name.x", "some.proplist", [ + {default, "n_name_x"} + ]}), + cuttlefish_mapping:parse({mapping, "n.$name.y", "some.proplist", [ + {default, "n_name_y"} + ]}), + cuttlefish_mapping:parse({mapping, "o.$name.z", "some.proplist", [ + {default, "o_name_z"}, + {include_default, "blue"} + ]}) + ], + + DConf = add_defaults(Conf, Mappings), + io:format("DConf: ~p~n", [DConf]), + ?assertEqual(9, length(DConf)), + ?assertEqual("q", proplists:get_value(["a","b","c"], DConf)), + ?assertNotEqual("l", proplists:get_value(["a","c","d"], DConf)), + ?assertEqual("override", proplists:get_value(["a","c","d"], DConf)), + ?assertEqual("unchanged", proplists:get_value(["no","match"], DConf)), + ?assertEqual("set_n_name_x", proplists:get_value(["n","ak","x"], DConf)), + ?assertEqual("set_n_name_x2", proplists:get_value(["n","bk","x"], DConf)), + ?assertEqual("n_name_x", proplists:get_value(["n","ck","x"], DConf)), + ?assertEqual("n_name_y", proplists:get_value(["n","ak","y"], DConf)), + ?assertEqual("n_name_y", proplists:get_value(["n","bk","y"], DConf)), + ?assertEqual("set_n_name_y3", proplists:get_value(["n","ck","y"], DConf)), + ?assertEqual(undefined, proplists:get_value(["o","blue","z"], DConf)), + ok. + +map_test() -> + lager:start(), + Schema = cuttlefish_schema:file("test/riak.schema"), + + Conf = conf_parse:file("test/riak.conf"), + + NewConfig = map(Schema, Conf), + + NewRingSize = proplists:get_value(ring_creation_size, proplists:get_value(riak_core, NewConfig)), + ?assertEqual(32, NewRingSize), + + NewAAE = proplists:get_value(anti_entropy, proplists:get_value(riak_kv, NewConfig)), + ?assertEqual({on,[debug]}, NewAAE), + + NewSASL = proplists:get_value(sasl_error_logger, proplists:get_value(sasl, NewConfig)), + ?assertEqual(false, NewSASL), + + NewHTTP = proplists:get_value(http, proplists:get_value(riak_core, NewConfig)), + ?assertEqual([{"10.0.0.1", 80}, {"127.0.0.1", 8098}], NewHTTP), + + NewPB = proplists:get_value(pb, proplists:get_value(riak_api, NewConfig)), + ?assertEqual([], NewPB), + + NewHTTPS = proplists:get_value(https, proplists:get_value(riak_core, NewConfig)), + ?assertEqual(undefined, NewHTTPS), + ok. + +minimal_map_test() -> + lager:start(), + Schema = cuttlefish_schema:file("test/riak.schema"), + Conf = [{["ring_size"], "32"}, + {["anti_entropy"], "debug"}], + NewConfig = minimal_map(Schema, Conf), + ?assertEqual([{riak_core, [{ring_creation_size, 32}]},{riak_kv,[{anti_entropy, {on, [debug]}}]}], + lists:sort(NewConfig)). + + +apply_mappings_test() -> + %% Two mappings, both alike in dignity, + %% In fair unit test, where we lay our scene, + %% From ancient failure break to new mutiny, + %% Where civil overrides makes civil priority unclean. + %% From forth the fatal loins of these two foes + %% A pair of star-cross'd mappings write one app var; + %% Whose misadventured piteous overthrows + %% Do with their merge behave unexpectedly. + + %% Assume add_defaults has already run + Conf = [ + {["conf", "key1"], "1"}, + {["conf", "key2"], "2"} + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key1", + "erlang.key", + [ + {default, "1"} + ] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "erlang.key", + [ + {default, "2"} + ] + }) + ], + + {DirectMappings, []} = apply_mappings({[], Mappings, []}, Conf), + cuttlefish_unit:assert_config(DirectMappings, "erlang.key", "1"), + ok. + +find_mapping_test() -> + lager:start(), + Mappings = [ + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 0}]}), + cuttlefish_mapping:parse({mapping, "variable.with.$matched.name", "", [{ default, 1}]}) + ], + io:format("Mappings: ~p~n", [Mappings]), + + ?assertEqual( + ["variable","with","fixed","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","fixed","name"], + cuttlefish_mapping:variable(find_mapping("variable.with.fixed.name", Mappings)) + ), + + ?assertEqual( + 0, + cuttlefish_mapping:default(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","A","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","A","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","B","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","B","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","C","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","C","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","D","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","D","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","E","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","E","name"], Mappings)) + ), + + %% Test variable name with dot + ?assertEqual( + "variable.with.E.F.name not_found", + ?XLATE(find_mapping(["variable","with","E","F","name"], Mappings)) + ), + %% Test variable name with escaped dot + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","E.F","name"], Mappings)) + ), + ok. + +multiple_hard_match_test() -> + %% In real life this should never happen, but if it does, I'd love a log message + Mappings = [ + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 0}]}), + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 1}]}) + ], + ?assertEqual( + "2 hard mappings and 0 fuzzy mappings found for variable.with.fixed.name", + ?XLATE(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + ok. + +apply_mappings_translations_dropped_correctly_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }) + ], + %% So, we have a translation for the corresponding mapping, but that mapping has no default + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. + +apply_mappings_translations_dropped_correctly_mixed_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "mapping.name", + [] + }) + ], + %% One valid mapping, and one that should be dropped (no default) + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. +apply_mappings_translations_dropped_correctly_mixed2_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "mapping.name", + [] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key3", + "mapping.name", + [] + }) + ], + %% One valid mapping and two that should be dropped (no default) + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. + +transform_datatypes_not_found_test() -> + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "erlang.key", + [] + }) + ], + + Conf = [ + {["conf", "other"], "string"} + ], + NewConf = transform_datatypes(Conf, Mappings), + ?assertEqual({[], [{error, {unknown_variable, "conf.other"}}]}, NewConf), + ok. + +validation_test() -> + + Pid = self(), + + Mappings = [cuttlefish_mapping:parse( + {mapping, "a", "b.c", [{validators, ["a"]}, {datatype, {enum, [true, false]}}]} + ) + ], + + Validators = [cuttlefish_validator:parse( + {validator, "a", "error msg", fun(X) -> Pid ! X, true end} + ) + ], + + Conf = [ + {["a"], true} + ], + + AppConf = map({[], Mappings, Validators}, Conf), + + receive + X -> + ?assert(X) + after + 1000 -> + ?assert(false) + end, + + ?assertEqual([{b, [{c, true}]}], AppConf), + ok. + +throw_unset_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(_X) -> cuttlefish:unset() end}) + ], + AppConf = map({Translations, Mappings, []}, []), + ?assertEqual([], AppConf), + ok. + +bad_prefix_match_test() -> + Prefixes = [ + {["prefix", "one"], ["one", "two"]}, + {["prefix", "two"], ["one", "two"]} + ], + Conf = [], + Default = 8, + VariableDef = ["prefix", "one", "other_thing", "$name"], + + ?assertEqual([], add_fuzzy_default(Prefixes, Conf, Default, VariableDef)), + ok. + +assert_extended_datatype( + Datatype, + Setting, + Expected) -> + Mappings = [ + cuttlefish_mapping:parse({mapping, "a.b", "e.k", [ + {datatype, Datatype} + ]}) + ], + Conf = [ + {["a","b"], Setting} + ], + + Actual = map({[], Mappings, []}, Conf), + + case Expected of + {error, Phase, EMsg} -> + ?assertMatch({error, Phase, _}, Actual), + ?assertEqual(EMsg, ?XLATE(hd(element(2, element(3, Actual))))); + _ -> + ?assertEqual([{e, [{k, Expected}]}], map({[], Mappings, []}, Conf)) + end, + ok. + +extended_datatypes_test() -> + assert_extended_datatype([integer, {atom, never}], "1", 1), + assert_extended_datatype([integer, {atom, never}], "never", never), + assert_extended_datatype([integer, {atom, never}], "always", {error, transform_datatypes, "Error transforming datatype for: a.b"}), + assert_extended_datatype([{duration, s}, {atom, never}], "never", never), + assert_extended_datatype([{atom, never}, integer], "1", 1), + assert_extended_datatype([{enum, [never, always]}, {duration, s}], "1s", 1), + assert_extended_datatype([{atom, never}, {atom, always}], "foo", {error, transform_datatypes, "Error transforming datatype for: a.b"}), + ok. + +not_found_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(Conf) -> cuttlefish:conf_get("d", Conf) end}) + ], + AppConf = map({Translations, Mappings, []}, [{["a"], "foo"}]), + ?assertEqual({error, apply_translations, + {errorlist, + [{error, {translation_missing_setting, + {"b.c", "d"}}}]}}, + AppConf). + +invalid_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(_Conf) -> cuttlefish:invalid("review all files") end}) + ], + AppConf = map({Translations, Mappings, []}, [{["a"], "foo"}]), + ?assertEqual({error, apply_translations, + {errorlist, + [{error, {translation_invalid_configuration, + {"b.c", "review all files"}}}]}}, + AppConf). + +value_sub_test() -> + Conf = [ + {["a","b","c"], "$(a.b)/c"}, + {["a","b"], "/a/b"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ABC = proplists:get_value(["a","b","c"], NewConf), + ?assertEqual("/a/b/c", ABC), + ok. + +value_sub_infinite_loop_test() -> + Conf = [ + {["a"], "$(c)/d"}, + {["b"], "$(a)/d"}, + {["c"], "$(b)/d"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "Circular RHS substitutions: [[\"a\"],[\"b\"],[\"c\"],[\"a\"]]", + ?XLATE(hd(Errors)) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"b\"],[\"c\"],[\"a\"],[\"b\"]]", + ?XLATE(hd(tl(Errors))) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"c\"],[\"a\"],[\"b\"],[\"c\"]]", + ?XLATE(hd(tl(tl(Errors)))) + ), + ok. + +value_sub_not_found_test() -> + Conf = [ + {["a"], "$(b)/c"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "'a' substitution requires a config variable 'b' to be set", + ?XLATE(hd(Errors)) + ), + ok. + +value_sub_whitespace_test() -> + Conf = [ + {["a", "b", "c"], "/tyktorp"}, + {["a"], "$(a.b.c)/svagen"}, + {["b"], "$( a.b.c)/svagen"}, + {["c"], "$(a.b.c )/svagen"}, + {["d"], "$( a.b.c )/svagen"} + ], + {NewConf, []} = value_sub(Conf), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["a"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["b"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["c"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["d"], NewConf)), + ok. + +value_sub_multiple_sub_test() -> + Conf = [ + {["a"], "/a"}, + {["b"], "/b"}, + {["c"], "$(a)$(b)"} + ], + {NewConf, []} = value_sub(Conf), + ?assertEqual("/a/b", proplists:get_value(["c"], NewConf)), + ok. + +value_sub_error_in_second_sub_test() -> + Conf = [ + {["a"], "$(b)/$(c)"}, + {["b"], "/b"}, + {["c"], "$(a)/c"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "Circular RHS substitutions: [[\"a\"],[\"c\"],[\"a\"]]", + ?XLATE(hd(Errors)) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"c\"],[\"a\"],[\"c\"]]", + ?XLATE(hd(tl(Errors))) + ), + ok. + +value_sub_false_circle_test() -> + Conf = [ + {["a"], "$(c)/$(c)"}, + {["c"], "C"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ?assertEqual("C/C", proplists:get_value(["a"], NewConf)), + ok. + +value_sub_paren_test() -> + Conf = [ + {["a"], "$(c)/$(c)"}, + {["c"], "C)"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ?assertEqual("C)/C)", proplists:get_value(["a"], NewConf)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_mapping.erl b/deps/cuttlefish/src/cuttlefish_mapping.erl new file mode 100644 index 0000000000000000000000000000000000000000..669fb28a8070d79486f31ead734f84b0470dee2f --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_mapping.erl @@ -0,0 +1,544 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_mapping: models a single mapping +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_mapping). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(mapping, { + variable::cuttlefish_variable:variable(), + mapping::string(), + default::term(), + commented::term(), + datatype = [string] :: cuttlefish_datatypes:datatype_list(), + level = basic :: basic | intermediate | advanced, + doc = [] :: list(), + include_default = undefined :: string() | undefined, + new_conf_value = undefined :: string() | undefined, + validators = [] :: [string()], + is_merge = false :: boolean(), + see = [] :: [cuttlefish_variable:variable()], + hidden = false :: boolean() + }). + +-type mapping() :: #mapping{}. +-type raw_mapping() :: {mapping, string(), string(), [proplists:property()]}. +-export_type([mapping/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_mapping/1, + variable/1, + is_fuzzy_variable/1, + mapping/1, + default/1, + has_default/1, + commented/1, + datatype/1, + level/1, + hidden/1, + doc/1, + see/1, + include_default/1, + new_conf_value/1, + replace/2, + validators/1, + validators/2, + remove_all_but_first/2 + ]). + +-spec parse(raw_mapping()) -> mapping() | cuttlefish_error:error(). +parse({mapping, Variable, Mapping, Proplist}) -> + + Datatype = case proplists:get_value(datatype, Proplist, string) of + {enum, Enums} -> + AtomEnums = [ begin + case is_list(E) of + true -> list_to_atom(E); + _ -> E + end + end || E <- Enums ], + [{enum, AtomEnums}]; + L when is_list(L) -> + case cuttlefish_datatypes:is_valid_list(L) of + true -> L; + _ -> {error, {mapping_types, L}} + end; + D -> [D] + end, + + case Datatype of + {error, _} -> + Datatype; + _ -> + #mapping{ + variable = cuttlefish_variable:tokenize(Variable), + default = proplists:get_value(default, Proplist), + commented = proplists:get_value(commented, Proplist), + mapping = Mapping, + level = proplists:get_value(level, Proplist, basic), + datatype = Datatype, + doc = proplists:get_value(doc, Proplist, []), + see = proplists:get_value(see, Proplist, []), + include_default = proplists:get_value(include_default, Proplist), + new_conf_value = proplists:get_value(new_conf_value, Proplist), + validators = proplists:get_value(validators, Proplist, []), + hidden = proplists:get_value(hidden, Proplist, false) + } + end; +parse(X) -> + {error, {mapping_parse, X}}. + +%% If this mapping exists, do something. +%% That something is usually a simple replace, unless the proplist in +%% the raw mapping contains the atom 'merge'. +%% +%% This fuction assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_mapping(), [mapping()]) -> [mapping()]. +parse_and_merge({mapping, Variable, _Mapping, Props} = MappingSource, Mappings) -> + Var = cuttlefish_variable:tokenize(Variable), + case lists:keyfind(Var, #mapping.variable, Mappings) of + false -> + [ parse(MappingSource) | Mappings]; + OldMapping -> + MaybeMergedMapping = case proplists:is_defined(merge, Props) of + true -> + merge(MappingSource, OldMapping); + _ -> + parse(MappingSource) + end, + lists:keyreplace(Var, #mapping.variable, Mappings, MaybeMergedMapping) + end. + +-spec merge(raw_mapping(), mapping()) -> mapping(). +merge(NewMappingSource, OldMapping) -> + MergeMapping = parse(NewMappingSource), + #mapping{ + variable = variable(MergeMapping), + mapping = mapping(MergeMapping), + default = choose(default, NewMappingSource, MergeMapping, OldMapping), + commented = choose(commented, NewMappingSource, MergeMapping, OldMapping), + datatype = choose(datatype, NewMappingSource, MergeMapping, OldMapping), + level = choose(level, NewMappingSource, MergeMapping, OldMapping), + doc = choose(doc, NewMappingSource, MergeMapping, OldMapping), + include_default = choose(include_default, NewMappingSource, MergeMapping, OldMapping), + new_conf_value = choose(include_default, NewMappingSource, MergeMapping, OldMapping), + validators = choose(validators, NewMappingSource, MergeMapping, OldMapping), + see = choose(see, NewMappingSource, MergeMapping, OldMapping), + hidden = choose(hidden, NewMappingSource, MergeMapping, OldMapping) + }. + +choose(Field, {_, _, _, PreParseMergeProps}, MergeMapping, OldMapping) -> + Which = case {Field, + proplists:is_defined(Field, PreParseMergeProps), + proplists:get_value(Field, PreParseMergeProps)} of + {see, _, []} -> old; + {doc, _, []} -> old; + {_, true, _} -> new; + _ -> old + end, + case Which of + new -> + ?MODULE:Field(MergeMapping); + old -> + ?MODULE:Field(OldMapping) + end. + +-spec is_mapping(any()) -> boolean(). +is_mapping(M) -> + is_tuple(M) andalso element(1, M) =:= mapping. + +-spec variable(mapping()) -> [string()]. +variable(M) -> M#mapping.variable. + +-spec is_fuzzy_variable(mapping()) -> boolean(). +is_fuzzy_variable(#mapping{variable=VariableDef}) -> + lists:any(fun(X) -> hd(X) =:= $$ end, VariableDef). + +-spec mapping(mapping()) -> string(). +mapping(M) -> M#mapping.mapping. + +-spec default(mapping()) -> term(). +default(M) -> M#mapping.default. + +-spec has_default(mapping()) -> boolean(). +has_default(MappingRecord) -> + default(MappingRecord) =/= undefined. + +-spec commented(mapping()) -> term(). +commented(M) -> M#mapping.commented. + +-spec datatype(mapping()) -> cuttlefish_datatypes:datatype_list(). +datatype(M) -> M#mapping.datatype. + +-spec level(mapping()) -> basic | intermediate | advanced. +level(M) -> M#mapping.level. + +-spec hidden(mapping()) -> boolean(). +hidden(M) -> M#mapping.hidden. + +-spec doc(mapping()) -> [string()]. +doc(M) -> M#mapping.doc. + +-spec see(mapping()) -> [cuttlefish_variable:variable()]. +see(M) -> M#mapping.see. + +-spec include_default(mapping()) -> string() | undefined. +include_default(M) -> M#mapping.include_default. + +-spec new_conf_value(mapping()) -> string() | undefined. +new_conf_value(M) -> M#mapping.new_conf_value. + +-spec validators(mapping()) -> [string()]. +validators(M) -> M#mapping.validators. + +-spec validators(mapping(), [cuttlefish_validator:validator()]) -> [cuttlefish_validator:validator()]. +validators(M, Validators) -> + lists:foldr(fun(VName, Vs) -> + case lists:keyfind(VName, 2, Validators) of + false -> Vs; + V -> [V|Vs] + end + end, [], M#mapping.validators). + +-spec replace(mapping(), [mapping()]) -> [mapping()]. +replace(Mapping, ListOfMappings) -> + Exists = lists:keymember(variable(Mapping), #mapping.variable, ListOfMappings), + case Exists of + true -> + lists:keyreplace(variable(Mapping), #mapping.variable, ListOfMappings, Mapping); + _ -> + [Mapping | ListOfMappings] + end. + +-spec remove_all_but_first(string(), [mapping()]) -> [mapping()]. +remove_all_but_first(MappingName, Mappings) -> + lists:foldr( + fun(#mapping{mapping=MN}=M, Acc) when MN =:= MappingName-> + [M|lists:keydelete(MN, #mapping.mapping, Acc)]; + (M, Acc) -> + [M|Acc] + end, [], Mappings). + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +mapping_test() -> + + SampleMapping = { + mapping, + "conf.key", + "erlang.key", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "config_file_val"}, + {doc, ["documentation", "for feature"]}, + {validators, ["valid.the.impailer"]}, + hidden + ] + }, + + Record = parse(SampleMapping), + + ?assertEqual(["conf","key"], Record#mapping.variable), + ?assertEqual("default value", Record#mapping.default), + ?assertEqual("erlang.key", Record#mapping.mapping), + ?assertEqual(advanced, Record#mapping.level), + ?assertEqual([{enum, [on, off]}], Record#mapping.datatype), + ?assertEqual(["documentation", "for feature"], Record#mapping.doc), + ?assertEqual("default_substitution", Record#mapping.include_default), + ?assertEqual("config_file_val", Record#mapping.new_conf_value), + ?assertEqual(["valid.the.impailer"], Record#mapping.validators), + ?assertEqual(true, Record#mapping.hidden), + + %% funciton tests + ?assertEqual(["conf","key"], variable(Record)), + ?assertEqual("default value", default(Record)), + ?assertEqual("erlang.key", mapping(Record)), + ?assertEqual(advanced, level(Record)), + ?assertEqual([{enum, [on, off]}], datatype(Record)), + ?assertEqual(["documentation", "for feature"], doc(Record)), + ?assertEqual("default_substitution", include_default(Record)), + ?assertEqual("config_file_val", new_conf_value(Record)), + ?assertEqual(["valid.the.impailer"], validators(Record)), + ?assertEqual(true, hidden(Record)), + + ok. + +replace_test() -> + Element1 = parse({ + mapping, + "conf.key18", + "erlang.key4", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val18"}, + {doc, ["documentation", "for feature"]} + ] + }), + + SampleMappings = [Element1, + parse({ + mapping, + "conf.key", + "erlang.key2", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_A"}, + {doc, ["documentation", "for feature"]} + ] + }) + ], + + Override = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_B"}, + {doc, ["documentation", "for feature"]} + ] + }), + + NewMappings = replace(Override, SampleMappings), + ?assertEqual([Element1, Override], NewMappings), + ok. + +validators_test() -> + Validators = [ + cuttlefish_validator:parse( + {validator, "a", "a desc", fun(_X) -> true end} + ), + cuttlefish_validator:parse({ + validator, "b", "b desc", fun(_X) -> true end + }), + cuttlefish_validator:parse({ + validator, "c", "c desc", fun(_X) -> true end + }) + ], + + %% Hack for coverage + [ begin + Fun = cuttlefish_validator:func(V), + ?assert(Fun(x)) + end || V <- Validators], + Mapping = parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {validators, ["a", "b"]} + ] + }), + + [A, B, _C] = Validators, + + ?assertEqual([A,B], validators(Mapping, Validators)), + + MappingWithMissingValidator = parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {validators, ["a", "d"]} %% There is no "d" + ] + }), + ?assertEqual([A], validators(MappingWithMissingValidator, Validators)), + + ok. + +parse_and_merge_test() -> + SampleMappings = [parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_A"}, + {doc, ["documentation", "for feature"]}, + hidden + ] + }), + parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_B"}, + {doc, ["documentation", "for feature"]} + ] + }) + ], + + NewMappings = parse_and_merge({mapping, "conf.key", "erlang.key3", [{hidden, false}]}, SampleMappings), + + ?assertEqual("erlang.key3", mapping(hd(NewMappings))), + ?assertEqual(false, hidden(hd(NewMappings))), + ok. + +smart_merge_test() -> + OldM1 = parse({mapping, "thing.to.merge", "some.key", [ + {default, 7}, + {datatype, integer}, + {doc, ["documentation", "for feature"]} + ]}), + OldM2 = parse({mapping, "thing.not.merged", "some.other_key", [{default, 6}, {datatype, integer}]}), + + OriginalMappings = [OldM1, OldM2], + + NewRawNoMergeMapping = {mapping, "thing.to.merge", "some.new_other_key", [{level, advanced}]}, + [NewUnMergedMapping, OldM2] = parse_and_merge( + NewRawNoMergeMapping, + OriginalMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewUnMergedMapping)), + ?assertEqual(undefined, default(NewUnMergedMapping)), + ?assertEqual("some.new_other_key", mapping(NewUnMergedMapping)), + ?assertEqual(advanced, level(NewUnMergedMapping)), + ?assertEqual([string], datatype(NewUnMergedMapping)), + ?assertEqual([], doc(NewUnMergedMapping)), + ?assertEqual(undefined, include_default(NewUnMergedMapping)), + ?assertEqual([], validators(NewUnMergedMapping)), + + NewRawMergeMapping = {mapping, "thing.to.merge", "some.new_key", [merge, {level, advanced}]}, + [NewMergedMapping, OldM2] = NewMappings = parse_and_merge( + NewRawMergeMapping, + OriginalMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewMergedMapping)), + ?assertEqual(7, default(NewMergedMapping)), + ?assertEqual("some.new_key", mapping(NewMergedMapping)), + ?assertEqual(advanced, level(NewMergedMapping)), + ?assertEqual([integer], datatype(NewMergedMapping)), + ?assertEqual(["documentation", "for feature"], doc(NewMergedMapping)), + ?assertEqual(undefined, include_default(NewMergedMapping)), + ?assertEqual([], validators(NewMergedMapping)), + + NewerRawMergeMapping = {mapping, "thing.to.merge", "some.third_key", [merge, {default, 42}]}, + + [NewerMergedMapping, OldM2] = parse_and_merge( + NewerRawMergeMapping, + NewMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewerMergedMapping)), + ?assertEqual(42, default(NewerMergedMapping)), + ?assertEqual("some.third_key", mapping(NewerMergedMapping)), + ?assertEqual(advanced, level(NewerMergedMapping)), + ?assertEqual([integer], datatype(NewerMergedMapping)), + ?assertEqual(["documentation", "for feature"], doc(NewerMergedMapping)), + ?assertEqual(undefined, include_default(NewerMergedMapping)), + ?assertEqual([], validators(NewerMergedMapping)), + ok. + +accidentally_used_strings_for_enums_test() -> + Mapping = parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {datatype, {enum, ["on", "off"]}} + ] + }), + ?assertEqual([{enum, [on, off]}], cuttlefish_mapping:datatype(Mapping)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTuple} = parse(not_a_raw_mapping), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_mapping:parse/1 : not_a_raw_mapping", + ?XLATE(ErrorTuple)), + ok. + +is_mapping_test() -> + ?assert(not(is_mapping(not_a_mapping))), + + M = parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {datatype, {enum, ["on", "off"]}} + ] + }), + ?assert(is_mapping(M)), + ok. + +%% conf.key can be any integer or the atom undefined. +extended_types_parse_test() -> + Mapping = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {datatype, [integer, {atom, undefined}]} + ] + }), + + ?assertEqual([integer, {atom, undefined}], cuttlefish_mapping:datatype(Mapping)), + ok. + +datatype_cannot_be_empty_list_test() -> + Mapping = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {datatype, []} + ] + }), + ?assertMatch({error, _}, Mapping), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl b/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl new file mode 100644 index 0000000000000000000000000000000000000000..e262303cc7a7f7072b0272b9f0233517a45fcc14 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl @@ -0,0 +1,95 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_rebar_plugin: generates an application's default .conf +%% as part of the build +%% +%% Copyright (c) 2013 Basho Technologies, Inc. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_rebar_plugin). + +-export([ + generate/2 +]). + +%% =================================================================== +%% Public API +%% =================================================================== +generate(Config0, ReltoolFile) -> + case should_i_run(Config0, ReltoolFile) of + {ok, Config, ReltoolConfig} -> + TargetDir = rebar_rel_utils:get_target_dir(Config, ReltoolConfig), + + %% Finally, overlay the files specified by the overlay section + case lists:keyfind(overlay, 1, ReltoolConfig) of + {overlay, Overlays} when is_list(Overlays) -> + SchemaOverlays = lists:filter(fun(Overlay) -> + element(1, Overlay) =:= template + andalso filename:extension(element(3, Overlay)) =:= ".schema" + end, + Overlays), + + Schemas = lists:sort([ + lists:flatten(filename:join(TargetDir, element(3, Schema))) + || Schema <- SchemaOverlays]), + + io:format("Schema: ~p~n", [Schemas]), + + case cuttlefish_schema:files(Schemas) of + {errorlist, _Es} -> + %% These errors were already printed + error; + {_Translations, Mappings, _Validators} -> + make_default_file(Config, TargetDir, Mappings) + end; + + false -> + %%io:format("No {overlay, [...]} found in reltool.config.\n", []); + ok; + _ -> + io:format("{overlay, [...]} entry in reltool.config " + "must be a list.\n", []) + end, + ok; + no -> + ok + end, + ok. + +make_default_file(Config, TargetDir, Mappings) -> + %% I really wanted this to default to the application name. The problem + %% is that the type of application that uses cuttlefish is also the kind + %% that doesn't have an .app.src file, so rebar doesn't get it. + %% I could have done something with cwd, but I didn't like that because you + %% could be building anywhere. So, cuttlefish it is. he's pretty cool anyway. + File = rebar_config:get_local(Config, cuttlefish_filename, "cuttlefish.conf"), + Filename = filename:join([TargetDir, "etc", File]), + + cuttlefish_conf:generate_file(Mappings, Filename), + ok. + +%% Only run for rel directory +should_i_run(Config0, ReltoolFile) -> + case rebar_rel_utils:is_rel_dir() of + {true, _} -> + %% Load the reltool configuration from the file + {Config, ReltoolConfig} = rebar_rel_utils:load_config(Config0, ReltoolFile), + {ok, Config, ReltoolConfig}; + false -> + no + end. diff --git a/deps/cuttlefish/src/cuttlefish_schema.erl b/deps/cuttlefish/src/cuttlefish_schema.erl new file mode 100644 index 0000000000000000000000000000000000000000..49a28a2320c59b434522d0ad79d1c9d82ffe0001 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_schema.erl @@ -0,0 +1,506 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_schema: slurps schema files +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_schema). + +-export([files/1, strings/1]). + +%% Exported for unit testing in other projects +-export([merger/1, string_fun_factory/0]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-export([file/1]). +-endif. + +-type schema() :: { + [cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()]}. +-export_type([schema/0]). + +-spec files([string()]) -> schema() | cuttlefish_error:errorlist(). +files(ListOfSchemaFiles) -> + merger(fun file/2, ListOfSchemaFiles). + +-spec strings([string()]) -> schema() | cuttlefish_error:errorlist(). +strings(ListOfStrings) -> + merger(fun string/2, ListOfStrings). + +-spec merger(fun((string(), schema()) -> schema() | cuttlefish_error:errorlist()), [string()]) -> + schema() | cuttlefish_error:errorlist(). +merger(Fun, ListOfInputs) -> + merger([ {Fun, Input} || Input <- ListOfInputs ]). + +-spec merger([{fun((string(), schema()) -> schema() | cuttlefish_error:errorlist()), string()}]) -> + schema() | cuttlefish_error:errorlist(). +merger(ListOfFunInputPairs) -> + Schema = lists:foldr( + fun({Fun, Input}, {TranslationAcc, MappingAcc, ValidatorAcc}) -> + case Fun(Input, {TranslationAcc, MappingAcc, ValidatorAcc}) of + {errorlist, Errors} -> + %% These have already been logged. We're not moving forward with this + %% but, return them anyway so the rebar plugin can display them + %% with io:format, since it doesn't have lager. + {errorlist, Errors}; + {Translations, Mappings, Validators} -> + NewMappings = lists:foldr( + fun cuttlefish_mapping:replace/2, + MappingAcc, + Mappings), + + NewTranslations = lists:foldr( + fun cuttlefish_translation:replace/2, + TranslationAcc, + Translations), + + NewValidators = lists:foldr( + fun cuttlefish_validator:replace/2, + ValidatorAcc, + Validators), + + {NewTranslations, NewMappings, NewValidators} + end + end, + {[], [], []}, + ListOfFunInputPairs), + filter(Schema). + +%% This filter is *ONLY* for the case of multiple mappings to a single +%% erlang app setting, *AND* there's no corresponding translation for +%% that app setting +-spec filter(schema() | cuttlefish_error:errorlist()) -> schema() | cuttlefish_error:errorlist(). +filter({errorlist, Errorlist}) -> + {errorlist, Errorlist}; +filter({Translations, Mappings, Validators}) -> + Counts = count_mappings(Mappings), + {MappingsToCheck, _} = lists:unzip(Counts), + NewMappings = lists:foldl( + fun(MappingName, Acc) -> + case lists:any( + fun(T) -> cuttlefish_translation:mapping(T) =:= MappingName end, + Translations) of + false -> + cuttlefish_mapping:remove_all_but_first(MappingName, Acc); + _ -> Acc + end + end, + Mappings, MappingsToCheck), + + {Translations, NewMappings, Validators}. + +count_mappings(Mappings) -> + lists:foldl( + fun(M, Acc) -> + orddict:update_counter(cuttlefish_mapping:mapping(M), 1, Acc) + end, + orddict:new(), + Mappings). + +-spec file(string(), schema()) -> schema() | cuttlefish_error:errorlist(). +file(Filename, Schema) -> + {ok, B, _} = erl_prim_loader:get_file(filename:absname(Filename)), + %% latin-1 is easier to support generically. We'll revisit utf-8 + %% support in the future. + S = unicode:characters_to_list(B, latin1), + case string(S, Schema) of + {errorlist, Errors} -> + cuttlefish_error:print("Error parsing schema: ~s", [Filename]), + {errorlist, Errors}; + NewSchema -> + NewSchema + end. + +%% @doc this exists so that we can create the fun using non exported +%% functions for unit testing +-spec string_fun_factory() -> fun((string(), schema()) -> + schema() | cuttlefish_error:errorlist()). +string_fun_factory() -> + fun string/2. + +-spec string(string(), schema()) -> schema() | cuttlefish_error:errorlist(). +string(S, {T, M, V}) -> + case erl_scan:string(S) of + {ok, Tokens, _} -> + CommentTokens = erl_comment_scan:string(S), + {Translations, Mappings, Validators, Errors} = parse_schema(Tokens, CommentTokens, {T, M, V, []}), + + case length(Errors) of + 0 -> + {Translations, Mappings, Validators}; + _ -> + lists:foreach(fun({error, _Term}=E) -> + cuttlefish_error:print(E) end, + Errors), + {errorlist, Errors} + end; + {error, {Line, erl_scan, _}, _} -> + Error = {erl_scan, Line}, + ErrStr = cuttlefish_error:xlate(Error), + lager:error(lists:flatten(ErrStr)), + {errorlist, [{error, Error}]} + end. + +-spec parse_schema( + [any()], + [any()], + {[cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()], + [cuttlefish_error:error()]} + ) -> + {[cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()], + [cuttlefish_error:error()]}. +%% We're done! We don't care about any comments after the last schema item +parse_schema([], _LeftoverComments, {TAcc, MAcc, VAcc, EAcc}) -> + {lists:reverse(TAcc), lists:reverse(MAcc), lists:reverse(VAcc), lists:reverse(EAcc)}; +parse_schema(ScannedTokens, CommentTokens, {TAcc, MAcc, VAcc, EAcc}) -> + {LineNo, Tokens, TailTokens } = parse_schema_tokens(ScannedTokens), + {Comments, TailComments} = lists:foldr( + fun(X={CommentLineNo, _, _, Comment}, {C, TC}) -> + case CommentLineNo < LineNo of + true -> {Comment ++ C, TC}; + _ -> {C, [X|TC]} + end + end, + {[], []}, + CommentTokens), + + NewAcc = case parse(Tokens) of + {error, {erl_parse, Reason}} -> + {TAcc, MAcc, VAcc, [{error, {erl_parse, {Reason, LineNo}}} | EAcc]}; + {mapping, {mapping, Variable, Mapping, Proplist}} -> + Attributes = comment_parser(Comments), + Doc = proplists:get_value(doc, Attributes, []), + See = get_see(Attributes), + MappingSource = {mapping, Variable, Mapping, [{see, See},{doc, Doc}|Proplist]}, + {TAcc, cuttlefish_mapping:parse_and_merge(MappingSource, MAcc), VAcc, EAcc}; + {translation, Return} -> + {cuttlefish_translation:parse_and_merge(Return, TAcc), MAcc, VAcc, EAcc}; + {validator, Return} -> + {TAcc, MAcc, cuttlefish_validator:parse_and_merge(Return, VAcc), EAcc}; + Other -> + {TAcc, MAcc, VAcc, [{error, {parse_schema, Other}} | EAcc]} + end, + parse_schema(TailTokens, TailComments, NewAcc). + +parse_schema_tokens(Scanned) -> + parse_schema_tokens(Scanned, []). + +parse_schema_tokens([], Acc=[Last|_]) -> + %% When you've reached the end of file without encountering a dot, + %% return the result anyway and let erl_parse produce the error. + {element(2, Last), lists:reverse(Acc), []}; +parse_schema_tokens(Scanned, Acc=[{dot, LineNo}|_]) -> + {LineNo, lists:reverse(Acc), Scanned}; +parse_schema_tokens([H|Scanned], Acc) -> + parse_schema_tokens(Scanned, [H|Acc]). + +-spec parse(list()) -> { mapping | translation | validator, tuple()} | cuttlefish_error:error(). +parse(Scanned) -> + case erl_parse:parse_exprs(Scanned) of + {ok, Parsed} -> + {value, X, _} = erl_eval:exprs(Parsed,[]), + {element(1, X), X}; + {error, {_Line, erl_parse, [H|_T]=Strings}} when is_list(H) -> + {error, {erl_parse, lists:flatten(Strings)}}; + {error, {_Line, erl_parse, Term}} -> + {error, {erl_parse, io_lib:format("~p", [Term])}}; + E -> + {error, {erl_parse_unexpected, E}} + end. + +-spec get_see([proplists:property()]) -> [cuttlefish_variable:variable()]. +get_see(Proplist) -> + [ cuttlefish_variable:tokenize(Line) + || [Line] <- proplists:get_all_values(see, Proplist)]. + + +comment_parser(Comments) -> + StrippedComments = + lists:filter(fun(X) -> X =/= [] end, + [percent_stripper(C) || C <- Comments]), + %% now, let's go annotation hunting + + AttrList = lists:foldl( + fun(Line, Acc) -> + case {Line, Acc} of + {[ $@ | T], _} -> + Annotation = hd(string:tokens(T, [$\s])), + [{list_to_atom(Annotation), [percent_stripper(T -- Annotation)] }|Acc]; + { _, []} -> []; + {String, _} -> + [{Annotation, Strings}|T] = Acc, + [{Annotation, [String|Strings]}|T] + end + end, [], StrippedComments), + SortedList = lists:reverse([ {Attr, lists:reverse(Value)} || {Attr, Value} <- AttrList]), + CorrectedList = attribute_formatter(SortedList), + CorrectedList. + +%% Just handles the @doc business +attribute_formatter([Other | T]) -> + [ Other | attribute_formatter(T)]; +attribute_formatter([]) -> []. + +percent_stripper(Line) -> + percent_stripper_r(percent_stripper_l(Line)). + +percent_stripper_l([$%|T]) -> percent_stripper_l(T); +percent_stripper_l([$\s|T]) -> percent_stripper_l(T); +percent_stripper_l(Line) -> Line. + +percent_stripper_r(Line) -> + lists:reverse( + percent_stripper_l( + lists:reverse(Line))). +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +%% Test helpers +-spec file(string()) -> schema() | cuttlefish_error:errorlist(). +file(Filename) -> + file(Filename, {[], [], []}). +-spec string(string()) -> schema() | cuttlefish_error:errorlist(). +string(S) -> + string(S, {[], [], []}). + +percent_stripper_test() -> + ?assertEqual("hi!", percent_stripper("%%% hi!")), + ?assertEqual("hi!", percent_stripper("%% hi!")), + ?assertEqual("hi!", percent_stripper("% hi!")), + ?assertEqual("hi!", percent_stripper(" hi!")), + ?assertEqual("hi!", percent_stripper(" % % hi!")), + ?assertEqual("hi!", percent_stripper("% % % hi!")), + ?assertEqual("hi!", percent_stripper("% % % hi! % % %")), + ok. + +comment_parser_test() -> + Comments = [ + " ", + "%% @doc this is a sample doc", + "%% it spans multiple lines %%", + "", + "%% there can be line breaks", + "%% @datatype enum on, off", + "%% @advanced", + "%% @include_default name_substitution", + "%% @mapping riak_kv.anti_entropy", + "%% @see mapping.a", + "%% @see mapping.b" + ], + ParsedComments = comment_parser(Comments), + ?assertEqual(["this is a sample doc", + "it spans multiple lines", + "there can be line breaks"], + proplists:get_value(doc, ParsedComments)), + ?assertEqual([["mapping.a"], ["mapping.b"]], + proplists:get_all_values(see, ParsedComments)), + ok. + +bad_file_test() -> + cuttlefish_lager_test_backend:bounce(), + {errorlist, ErrorList} = file("test/bad_erlang.schema"), + + Logs = cuttlefish_lager_test_backend:get_logs(), + [L1|Tail] = Logs, + [L2|[]] = Tail, + ?assertMatch({match, _}, re:run(L1, "Error scanning erlang near line 10")), + ?assertMatch({match, _}, re:run(L2, "Error parsing schema: test/bad_erlang.schema")), + + ?assertEqual([ + {error, {erl_scan, 10}} + ], ErrorList), + ok. + +parse_invalid_erlang_test() -> + cuttlefish_lager_test_backend:bounce(), + SchemaString = lists:flatten([ + "%% @doc some doc\n", + "%% the doc continues!\n", + "{mapping, \"ring_size\", \"riak_core.ring_creation_size\", [\n", + " {datatype, penguin}" + "}.\n" + ]), + Parsed = string(SchemaString), + + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "Schema parse error near line number 4")), + ?assertMatch({match, _}, re:run(Log, "syntax error before: ")), + ?assertMatch({match, _}, re:run(Log, "'}'")), + + ?assertEqual({errorlist, [{error, {erl_parse, {"syntax error before: '}'", 4}}}]}, + Parsed). + + +parse_bad_datatype_test() -> + cuttlefish_lager_test_backend:bounce(), + + SchemaString = lists:flatten([ + "%% @doc some doc\n", + "%% the doc continues!\n", + "{mapping, \"ring_size\", \"riak_core.ring_creation_size\", [\n", + " {default, \"blue\"}, ", + " {datatype, penguin}" + "]}.\n" + ]), + _Parsed = string(SchemaString), + ?assertEqual([], cuttlefish_lager_test_backend:get_logs()). + +files_test() -> + lager:start(), + %% files/1 takes a list of schemas in priority order. + %% Loads them in reverse order, as things are overridden + {Translations, Mappings, Validators} = files( + [ + "test/multi1.schema", + "test/multi2.schema", + "test/multi3.schema" + ]), + + ?assertEqual(6, length(Mappings)), + [M1, M2, M3, M4, M5, M6] = Mappings, + + %% Check mappings in correct order + io:format("~p", [Mappings]), + ?assertEqual(["top_level", "var1"], cuttlefish_mapping:variable(M1)), + ?assertEqual(["a", "some", "var1"], cuttlefish_mapping:variable(M2)), + ?assertEqual(["a", "some", "var2"], cuttlefish_mapping:variable(M3)), + ?assertEqual(["a", "some", "var3"], cuttlefish_mapping:variable(M4)), + ?assertEqual(["b", "some", "var1"], cuttlefish_mapping:variable(M5)), + ?assertEqual(["b", "some", "var2"], cuttlefish_mapping:variable(M6)), + + + %% Check correct mapping overrides + ?assertEqual("app_a.big_var", cuttlefish_mapping:mapping(M1)), + ?assertEqual("app_a.some_var1", cuttlefish_mapping:mapping(M2)), + ?assertEqual("app_a.some_var", cuttlefish_mapping:mapping(M3)), + ?assertEqual("app_a.some_var3", cuttlefish_mapping:mapping(M4)), + ?assertEqual("app_b.some_var3", cuttlefish_mapping:mapping(M5)), + ?assertEqual("app_b.some_var2", cuttlefish_mapping:mapping(M6)), + + ?assertEqual(6, length(Translations)), + [T1, T2, T3, T4, T5, T6] = Translations, + + %% Check translation overrides + AssertTran = fun(Mapping, Translation, Expected) -> + + %% Check Order + ?assertEqual(Mapping, cuttlefish_translation:mapping(Translation)), + %% Check Override + F1 = cuttlefish_translation:func(Translation), + ?assertEqual(Expected, F1(x)) + end, + + AssertTran("app_a.big_var", T1, "tippedy top"), + AssertTran("app_a.some_var1", T2, "a1"), + AssertTran("app_a.some_var2", T3, "a2"), + AssertTran("app_a.some_var3", T4, "toplevel"), + AssertTran("app_b.some_var1", T5, "b3"), + AssertTran("app_b.some_var2", T6, "b2"), + + %% One more time, for validators! + ?assertEqual(5, length(Validators)), + [V1, V2, V3, V4, V5] = Validators, + + %% Now check overrides + AssertVal = fun(Name, Validator, Expected) -> + %% Check Order + ?assertEqual(Name, cuttlefish_validator:name(Validator)), + %% Check Override + F1 = cuttlefish_validator:func(Validator), + ?assertEqual(Expected, F1(x)) + end, + + AssertVal("top.val", V1, false), + AssertVal("a.validator1", V2, true), + AssertVal("a.validator2", V3, false), + AssertVal("b.validator1", V4, false), + AssertVal("b.validator2", V5, true), + + ok. + +get_see_test() -> + Proplist = [ + {doc, ["line1", "line2", "line3"]}, + {see, ["a.b"]}, + {see, ["a.c"]} + ], + ?assertEqual([["a","b"],["a","c"]], get_see(Proplist)), + ok. + +see_test() -> + String = "{mapping, \"a.b\", \"e.k\", []}.\n" + ++ "%% @see a.b\n" + ++ "{mapping, \"a.c\", \"e.j\", []}.\n", + {_, Mappings, _} = strings([String]), + ?assertEqual(2, length(Mappings)), + [M1, M2] = Mappings, + ?assertEqual([], cuttlefish_mapping:see(M1)), + ?assertEqual([["a", "b"]], cuttlefish_mapping:see(M2)), + ok. + +strings_filtration_test() -> + + String = "{mapping, \"a.b\", \"e.k\", []}.\n" + ++ "{mapping, \"a.c\", \"e.k\", []}.\n" + ++ "{mapping, \"a.d\", \"e.j\", []}.\n" + ++ "{mapping, \"a.e\", \"e.j\", []}.\n" + ++ "{translation, \"e.j\", fun(X) -> \"1\" end}.\n" + ++ "{mapping, \"b.a\", \"e.i\", []}.\n" + ++ "{mapping, \"b.b\", \"e.i\", []}.\n" + ++ "{mapping, \"b.c\", \"e.i\", []}.\n" + ++ "{translation, \"e.i\", fun(X) -> \"1\" end}.\n", + {Translations, Mappings, _} = strings([String]), + ?assertEqual(2, length(Translations)), + ?assertEqual(6, length(Mappings)), + ?assertEqual(["a", "b"], cuttlefish_mapping:variable(hd(Mappings))), + ?assertEqual(["b", "b"], cuttlefish_mapping:variable(lists:nth(5, Mappings))), + ok. + +error_test() -> + {ErrorAtom, Errors} = strings(["tyktorp"]), + io:format("~p", [Errors]), + ?assertEqual(errorlist, ErrorAtom), + + {errorlist, [{error, Error}]} = strings(["{mapping, \"a\", [{datatype, unsupported_datatype}]}."]), + ?assertEqual( + "Unknown parse return: {mapping,\n {mapping,\"a\",[{datatype,unsupported_datatype}]}}", + ?XLATE(Error)), + ok. + +merge_across_multiple_schemas_test() -> + StringSchema1 = "{mapping, \"a.b\", \"erlang.key\", [merge, {default, on}]}.", + StringSchema2 = "%%@doc hi\n{mapping, \"a.b\", \"erlang.key\", [{default, off}, {datatype, flag}]}.", + + {_, Mappings, _} = strings([StringSchema1, StringSchema2]), + ?assertEqual(1, length(Mappings)), + [Mapping] = Mappings, + ?assertEqual([flag], cuttlefish_mapping:datatype(Mapping)), + ?assertEqual(on, cuttlefish_mapping:default(Mapping)), + ?assertEqual(["hi"], cuttlefish_mapping:doc(Mapping)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_translation.erl b/deps/cuttlefish/src/cuttlefish_translation.erl new file mode 100644 index 0000000000000000000000000000000000000000..bfd618d7aa55110c26da7296c8b01a7c7c3686fa --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_translation.erl @@ -0,0 +1,227 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_translation: models a cuttlefish translation +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_translation). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(translation, { + mapping::string(), + func::fun() | undefined + }). +-type translation() :: #translation{}. +-type translation_fun() :: fun(([proplists:property()]) -> any()). +-type raw_translation() :: {translation, string(), translation_fun()} | {translation, string()}. +-export_type([translation/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_translation/1, + mapping/1, + func/1, + replace/2]). + +-spec parse(raw_translation()) -> translation() | cuttlefish_error:error(). +parse({translation, Mapping}) -> + #translation{ + mapping = Mapping + }; +parse({translation, Mapping, Fun}) -> + #translation{ + mapping = Mapping, + func = Fun + }; +parse(X) -> + {error, {translation_parse, X}}. + +%% This assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_translation(), [translation()]) -> [translation()]. +parse_and_merge({translation, Mapping}, Translations) -> + lists:keydelete(Mapping, #translation.mapping, Translations); +parse_and_merge({translation, Mapping, _} = TranslationSource, Translations) -> + NewTranslation = parse(TranslationSource), + case lists:keyfind(Mapping, #translation.mapping, Translations) of + false -> + [ NewTranslation | Translations]; + _OldMapping -> + lists:keyreplace(Mapping, #translation.mapping, Translations, NewTranslation) + end. + +-spec is_translation(any()) -> boolean(). +is_translation(T) -> is_tuple(T) andalso element(1, T) =:= translation. + +-spec mapping(translation()) -> string(). +mapping(T) -> T#translation.mapping. + +-spec func(translation()) -> fun(). +func(T) -> T#translation.func. + +-spec replace(translation(), [translation()]) -> [translation()]. +replace(Translation, ListOfTranslations) -> + Exists = lists:keymember(mapping(Translation), #translation.mapping, ListOfTranslations), + case Exists of + true -> + lists:keyreplace(mapping(Translation), #translation.mapping, ListOfTranslations, Translation); + _ -> + [Translation | ListOfTranslations] + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + TranslationDataStruct = { + translation, + "mapping", + fun(X) -> X*2 end + }, + + Translation = parse(TranslationDataStruct), + + ?assertEqual("mapping", Translation#translation.mapping), + F = Translation#translation.func, + ?assertEqual(4, F(2)), + ok. + + +getter_test() -> + Translation = #translation{ + mapping = "mapping", + func = fun(X) -> X*2 end + }, + + ?assertEqual("mapping", mapping(Translation)), + + Fun = func(Translation), + ?assertEqual(4, Fun(2)), + ok. + + +replace_test() -> + Element1 = #translation{ + mapping = "mapping18", + func = fun(X) -> X*2 end + }, + ?assertEqual(4, (Element1#translation.func)(2)), + + Element2 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Element2#translation.func)(2)), + + SampleTranslations = [Element1, Element2], + + Override = #translation{ + mapping = "mapping1", + func = fun(X) -> X*5 end + }, + ?assertEqual(25, (Override#translation.func)(5)), + + NewTranslations = replace(Override, SampleTranslations), + ?assertEqual([Element1, Override], NewTranslations), + ok. + +parse_and_merge_test() -> + Sample1 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#translation.func)(2)), + + Sample2 = #translation{ + mapping = "mapping2", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#translation.func)(2)), + + SampleTranslations = [Sample1, Sample2], + + NewTranslations = parse_and_merge( + {translation, "mapping1", fun(X) -> X * 10 end}, + SampleTranslations), + F = func(hd(NewTranslations)), + ?assertEqual(50, F(5)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTuple} = parse(not_a_raw_translation), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_translation:parse/1 : not_a_raw_translation", + ?XLATE(ErrorTuple)), + ok. + +parse_empty_test() -> + TranslationDataStruct = { + translation, + "mapping" + }, + + Translation = parse(TranslationDataStruct), + + ?assertEqual("mapping", Translation#translation.mapping), + F = Translation#translation.func, + ?assertEqual(undefined, F), + ok. + +parse_and_merge_empty_test() -> + Sample1 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#translation.func)(2)), + + Sample2 = #translation{ + mapping = "mapping2", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#translation.func)(2)), + + SampleTranslations = [Sample1, Sample2], + + NewTranslations = parse_and_merge( + {translation, "mapping1"}, + SampleTranslations), + F = func(hd(NewTranslations)), + ?assertEqual(1, length(NewTranslations)), + ?assertEqual(40, F(10)), + ok. + +is_translation_test() -> + ?assert(not(is_translation(not_a_translation))), + + T = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (T#translation.func)(2)), + ?assert(is_translation(T)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_unit.erl b/deps/cuttlefish/src/cuttlefish_unit.erl new file mode 100644 index 0000000000000000000000000000000000000000..6dbd2a32a4e4954d0a8190faf3889f3dadbfdc3c --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_unit.erl @@ -0,0 +1,209 @@ +-module(cuttlefish_unit). + +-include_lib("eunit/include/eunit.hrl"). +-compile([nowarn_export_all, export_all]). + +generate_templated_config(FileName, Conf, Context) -> + generate_templated_config(FileName, Conf, Context, {[], [], []}). + +generate_templated_config(FileName, Conf, Context, PreexistingSchema) -> + RenderedSchemas = case lists:all(fun(X) -> not is_list(X) end, FileName) of + true -> %% it's a single depth list, aka string + [{ cuttlefish_schema:string_fun_factory(), render_template(FileName, Context)}]; + _ -> %% It's a list of lists, aka multiple strings + [{ cuttlefish_schema:string_fun_factory(), render_template(F, Context)} || F <- FileName] + end, + Schema = cuttlefish_schema:merger(RenderedSchemas ++ [ { fun(_, _) -> PreexistingSchema end, ""} ]), + cuttlefish_generator:map(Schema, Conf). + +render_template(FileName, Context) -> + {ok, Bin, _} = erl_prim_loader:get_file(filename:absname(FileName)), + %% Stolen from rebar_templater:render/2 + %% Be sure to escape any double-quotes before rendering... + ReOpts = [global, {return, list}], + Str0 = re:replace(Bin, "\\\\", "\\\\\\", ReOpts), + Str1 = re:replace(Str0, "\"", "\\\\\"", ReOpts), + + %% the mustache module is only available in the context of a rebar run. + case {code:ensure_loaded(mustache), code:ensure_loaded(rebar_mustache), code:ensure_loaded(bbmustache)} of + {{module, mustache}, _, _} -> + mustache:render(Str1, dict:from_list(Context)); + {_, {module, rebar_mustache}, _} -> + rebar_mustache:render(Str1, dict:from_list(Context)); + {_, _, {module, bbmustache}} -> + Ret = bbmustache:render( + Bin, + maps:from_list( + [case is_atom(K) of + true -> {atom_to_list(K), V}; + false -> I + end || I = {K, V} <- Context])), + binary_to_list(Ret); + _ -> + io:format("mustache and/or rebar_mustache module not loaded. " + "This test can only be run in a rebar context.~n") + end. + +-spec generate_config(atom(), [string()]|string(), list()) -> list(). +generate_config(strings, SchemaStrings, Conf) -> + Schema = cuttlefish_schema:strings(SchemaStrings), + cuttlefish_generator:map(Schema, Conf); + +generate_config(string, SchemaString, Conf) -> + Schema = cuttlefish_schema:strings([SchemaString]), + cuttlefish_generator:map(Schema, Conf); + +generate_config(file, SchemaFile, Conf) -> + generate_config(SchemaFile, Conf). + +-spec generate_config(string(), list()) -> list(). +generate_config(SchemaFile, Conf) -> + Schema = cuttlefish_schema:files([SchemaFile]), + cuttlefish_generator:map(Schema, Conf). + +assert_valid_config(Config) -> + case Config of + List when is_list(List) -> + ok; + {error, Phase, {errorlist, Errors}} -> + erlang:exit({assert_valid_config_failed, + [{phase, Phase}, + {errorlist, Errors}]}); + Other -> + erlang:exit({assert_valid_config_failed, + [{bad_value, Other}]}) + end. + +assert_config(Config, Path, Value) -> + ok = assert_valid_config(Config), + ActualValue = case path(cuttlefish_variable:tokenize(Path), Config) of + {error, bad_nesting} -> + ?assertEqual({Path, Value}, {Path, nesting_error}); + notset -> + ?assertEqual({Path, Value}, {Path, notset}); + {ok, X} -> X + end, + ?assertEqual({Path, Value}, {Path, ActualValue}). + +assert_not_configured(Config, Path) -> + ok = assert_valid_config(Config), + case path(cuttlefish_variable:tokenize(Path), Config) of + {error, bad_nesting} -> + erlang:exit({assert_not_configured_failed, + [{bad_nesting, Path}, + {config, Config}]}); + {ok, Value} -> + erlang:exit({assert_not_configured_failed, + [{key, Path}, + {configured_to, Value}, + {config, Config}]}); + notset -> ok + end. + +%% @doc Asserts that the generated configuration is in error. +assert_error(Config) -> + ?assertMatch({error, _, {errorlist, _}}, Config). + +%% @doc Asserts that the generated configuration is in error, with the +%% error occurring in a specific phase. +assert_error_in_phase(Config, Phase) when is_atom(Phase) -> + ?assertMatch({error, Phase, {errorlist, _}}, Config). + +%% @doc Asserts that the generated configuration is in error, and the +%% given error message was emitted by the given phase. +assert_error(Config, Phase, Message) -> + assert_error_in_phase(Config, Phase), + assert_error_message(Config, Message). + +%% @doc Asserts that the generated configuration is in error and has +%% the given error messages. +assert_errors(Config, [H|_]=Messages) when is_list(H) -> + [ assert_error_message(Config, Message) || Message <- Messages ]. + +%% @doc Asserts that the generated configuration is in error, with +%% errors occuring in the given phase and containing the given +%% messages. +assert_errors(Config, Phase, [H|_]=Messages) when is_list(H) -> + assert_error_in_phase(Config, Phase), + [ assert_error_message(Config, Message) || Message <- Messages ]. + +%% @doc Asserts that the generated configuration is in error and +%% contains an error tuple that translates to the given error message +assert_error_message(Config, Message) -> + ok = assert_error(Config), + {errorlist, Errors} = element(3, Config), + chase_message(Message, Errors, Errors). + +chase_message(Message, [], Errors) -> + erlang:exit({assert_error_message_failed, + [{expected, Message}, + {actual, Errors}]}); +chase_message(Message, [{error, ErrorTerm}|T], Errors) -> + case lists:flatten(cuttlefish_error:xlate(ErrorTerm)) of + Message -> + ok; + _ -> + chase_message(Message, T, Errors) + end. + +-spec path(cuttlefish_variable:variable(), + [{ string() | atom() | binary() , term()}]) -> + {ok, any()} | notset | {error, bad_nesting}. +path(_, []) -> + {error, bad_nesting}; +path(_, undefined) -> + notset; +path([Last], Proplist) -> + case lists:dropwhile(key_no_match(Last), Proplist) of + [] -> notset; + [{_, V}|_] -> {ok, V} + end; +path([H|T], Proplist) when is_list(H)-> + case path([H], Proplist) of + {ok, SmallerProplist} -> + path(T, SmallerProplist); + Other -> + Other + end. + +-spec key_no_match(string()) -> fun((atom() | string() | binary()) -> boolean()). +key_no_match(Key) -> + fun({E, _}) when is_atom(E) -> E =/= list_to_atom(Key); + ({E, _}) when is_list(E) -> E =/= Key; + ({E, _}) when is_binary(E) -> E =/= list_to_binary(Key); + (_) -> true + end. + +-spec dump_to_file(any(), string()) -> ok. +dump_to_file(ErlangTerm, Filename) -> + {ok, S} = file:open(Filename, [write,append]), + io:format(S, "~p~n", [ErlangTerm]), + _ = file:close(S), + ok. + +-ifdef(TEST). + +path_test() -> + ?assertEqual( + {ok, "disable"}, + path(["vm_args", "-smp"], [{vm_args, [{'-smp', "disable"}]}])), + ok. + +multiple_schema_generate_templated_config_test() -> + lager:start(), + Context = [ + {mustache, "mustache"} + ], + PrereqSchema = {[], [ + cuttlefish_mapping:parse( + {mapping, "c", "app.c", [ + {default, "/c"} + ]}) + ], []}, + + Config = cuttlefish_unit:generate_templated_config("test/sample_mustache.schema", [], Context, PrereqSchema), + lager:error("~p", [Config]), + assert_config(Config, "app_a.setting_b", "/c/mustache/a.b"), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_util.erl b/deps/cuttlefish/src/cuttlefish_util.erl new file mode 100644 index 0000000000000000000000000000000000000000..ce174aa64b685f50c2b1e9d8a3be7750ebcf1ed5 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_util.erl @@ -0,0 +1,191 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_util: various cuttlefish utility functions +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_util). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + replace_proplist_value/3, + numerify/1, + ceiling/1, + levenshtein/2]). + +%% Legacy API +-export([ + conf_get_value/2, + conf_get_value/3, + filter_by_variable_starts_with/2, + matches_for_variable_def/2, + fuzzy_variable_match/2 +]). + + +%% @deprecated +conf_get_value(Key, Conf) -> + lager:warning("cuttlefish_util:conf_get_value/2 has been deprecated. use cuttlefish:conf_get/2"), + cuttlefish:conf_get(Key, Conf). + +%% @deprecated +conf_get_value(Key, Conf, Default) -> + lager:warning("cuttlefish_util:conf_get_value/3 has been deprecated. use cuttlefish:conf_get/3"), + cuttlefish:conf_get(Key, Conf, Default). + +%% @deprecated +filter_by_variable_starts_with(Prefix, Conf) -> + lager:warning("cuttlefish_util:filter_by_variable_starts_with/2 has been deprecated. use cuttlefish_variable:filter_by_prefix/2"), + cuttlefish_variable:filter_by_prefix(Prefix, Conf). + +%% @deprecated +matches_for_variable_def(VarDef, Conf) -> + lager:warning("cuttlefish_util:matches_for_variable_def/2 has been deprecated. use cuttlefish_variable:fuzzy_matches/2"), + cuttlefish_variable:fuzzy_matches(VarDef, Conf). + +%% @deprecated +fuzzy_variable_match(Var, VarDef) -> + lager:warning("cuttlefish_util:fuzzy_variable_match/2 has been deprecated. use cuttlefish_variable:is_fuzzy_match/2"), + cuttlefish_variable:is_fuzzy_match(Var, VarDef). + +%% @doc replace the element in a proplist +-spec replace_proplist_value(atom() | string(), any(), [{string(), any()}]) -> [{string(), any()}]. +replace_proplist_value(Key, Value, Proplist) -> + lists:keystore(Key, 1, Proplist, {Key, Value}). + +%% @doc Turn a string into a number if `list_to_float' or +%% `list_to_integer' accept it as valid +-spec numerify(string()) -> integer()|float()|cuttlefish_error:error(). +numerify([$.|_]=Num) -> numerify([$0|Num]); +numerify(String) -> + try list_to_float(String) of + Float -> Float + catch + _:_ -> + try list_to_integer(String) of + Int -> Int + catch + _:_ -> + {error, {number_parse, String}} + end + end. + +%% @doc remember when you learned about decimal places. about a minute +%% later, you learned about rounding up and down. This is rounding up. +-spec ceiling(float()) -> integer(). +ceiling(X) -> + T = erlang:trunc(X), + case (X - T) of + Neg when Neg < 0 -> T; + Pos when Pos > 0 -> T + 1; + _ -> T + end. + +%% Levenshtein code by Adam Lindberg, Fredrik Svensson via +%% http://www.trapexit.org/String_similar_to_(Levenshtein) +%% +%%------------------------------------------------------------------------------ +%% @spec levenshtein(StringA :: string(), StringB :: string()) -> integer() +%% @doc Calculates the Levenshtein distance between two strings +%% @end +%%------------------------------------------------------------------------------ +levenshtein(Samestring, Samestring) -> 0; +levenshtein(String, []) -> length(String); +levenshtein([], String) -> length(String); +levenshtein(Source, Target) -> + levenshtein_rec(Source, Target, lists:seq(0, length(Target)), 1). + +%% Recurses over every character in the source string and calculates a list of distances +levenshtein_rec([SrcHead|SrcTail], Target, DistList, Step) -> + levenshtein_rec(SrcTail, Target, levenshtein_distlist(Target, DistList, SrcHead, [Step], Step), Step + 1); +levenshtein_rec([], _, DistList, _) -> + lists:last(DistList). + +%% Generates a distance list with distance values for every character in the target string +levenshtein_distlist([TargetHead|TargetTail], [DLH|DLT], SourceChar, NewDistList, LastDist) when length(DLT) > 0 -> + Min = lists:min([LastDist + 1, hd(DLT) + 1, DLH + dif(TargetHead, SourceChar)]), + levenshtein_distlist(TargetTail, DLT, SourceChar, NewDistList ++ [Min], Min); +levenshtein_distlist([], _, _, NewDistList, _) -> + NewDistList. + +% Calculates the difference between two characters or other values +dif(C, C) -> 0; +dif(_, _) -> 1. + +-ifdef(TEST). + +replace_proplist_value_test() -> + Proplist = [ + {"test1", 1}, + {"test2", 2}, + {"test3", 3} + ], + + NewProplist = replace_proplist_value("test2", 8, Proplist), + ?assertEqual( + 8, + proplists:get_value("test2", NewProplist) + ), + ok. + +replace_proplist_value_when_undefined_test() -> + Proplist = [ + {"test1", 1}, + {"test2", 2} + ], + + NewProplist = replace_proplist_value("test3", 3, Proplist), + ?assertEqual( + 3, + proplists:get_value("test3", NewProplist) + ), + ok. + +levenshtein_test() -> + ?assertEqual(0, levenshtein("X", "X")), + ?assertEqual(1, levenshtein("X", "XX")), + ?assertEqual(1, levenshtein("penguin", "penguino")), + ?assertEqual(1, levenshtein("dtrace", "ctrace")), + ?assertEqual(5, levenshtein("anti_entropy", "anti_entropy.tick")), + ?assertEqual(1, levenshtein("anti_entropy", "anti-entropy")), + ?assertEqual(4, levenshtein("", "four")), + ?assertEqual(4, levenshtein("four", "")), + ok. + +print_error_test() -> + application:stop(lager), + case lager:error("Error") of + {error, lager_not_running} -> + ?assertEqual(ok, (cuttlefish_error:print("Error"))); + Other -> + ?assertEqual({error, lager_not_running}, Other) + end, + ok. + +ceiling_test() -> + ?assertEqual(9, ceiling(8.99999)), + ?assertEqual(9, ceiling(8.00001)), + ?assertEqual(9, ceiling(9.0)), + ?assertEqual(-2, ceiling(-2.0000001)), + ?assertEqual(-2, ceiling(-2.9999999)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_validator.erl b/deps/cuttlefish/src/cuttlefish_validator.erl new file mode 100644 index 0000000000000000000000000000000000000000..4b9e1271a72a187de19f442506a5b26be4d26e58 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_validator.erl @@ -0,0 +1,203 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_validator: models a cuttlefish validator +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_validator). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(validator, { + name::string(), + description::string(), + func::fun() + }). +-type validator() :: #validator{}. +-type validator_fun() :: fun((any()) -> boolean()). +-type raw_validator() :: {validator, string(), string(), validator_fun()}. +-export_type([validator/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_validator/1, + name/1, + description/1, + func/1, + replace/2]). + +-spec parse(raw_validator()) -> validator() | cuttlefish_error:error(). +parse({validator, Name, Description, Fun}) -> + #validator{ + name = Name, + description = Description, + func = Fun + }; +parse(X) -> + {error, {validator_parse, X}}. + +%% This assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_validator(), [validator()]) -> [validator()|cuttlefish_error:error()]. +parse_and_merge({validator, ValidatorName, _, _} = ValidatorSource, Validators) -> + NewValidator = parse(ValidatorSource), + case lists:keyfind(ValidatorName, #validator.name, Validators) of + false -> + [ NewValidator | Validators]; + _OldMapping -> + lists:keyreplace(ValidatorName, #validator.name, Validators, NewValidator) + end. + +-spec is_validator(any()) -> boolean(). +is_validator(V) -> is_tuple(V) andalso element(1, V) =:= validator. + +-spec name(validator()) -> string(). +name(V) -> V#validator.name. + +-spec description(validator()) -> string(). +description(V) -> V#validator.description. + +-spec func(validator()) -> fun(). +func(V) -> V#validator.func. + +-spec replace(validator(), [validator()]) -> [validator()]. +replace(Validator, ListOfValidators) -> + Exists = lists:keymember(name(Validator), #validator.name, ListOfValidators), + case Exists of + true -> + lists:keyreplace(name(Validator), #validator.name, ListOfValidators, Validator); + _ -> + [Validator | ListOfValidators] + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + ValidatorDataStruct = { + validator, + "name", + "description", + fun(X) -> X*2 end + }, + + Validator = parse(ValidatorDataStruct), + + ?assertEqual("name", Validator#validator.name), + ?assertEqual("description", Validator#validator.description), + F = Validator#validator.func, + ?assertEqual(4, F(2)), + ok. + + +getter_test() -> + Validator = #validator{ + name = "name", + description = "description", + func = fun(X) -> X*2 end + }, + + ?assertEqual("name", name(Validator)), + ?assertEqual("description", description(Validator)), + + Fun = func(Validator), + ?assertEqual(4, Fun(2)), + ok. + + +replace_test() -> + Element1 = #validator{ + name = "name18", + description = "description18", + func = fun(X) -> X*2 end + }, + ?assertEqual(4, (Element1#validator.func)(2)), + + Element2 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Element2#validator.func)(2)), + + SampleValidators = [Element1, Element2], + + Override = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*5 end + }, + ?assertEqual(25, (Override#validator.func)(5)), + + NewValidators = replace(Override, SampleValidators), + ?assertEqual([Element1, Override], NewValidators), + ok. + +remove_duplicates_test() -> + Sample1 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#validator.func)(2)), + + Sample2 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#validator.func)(2)), + + SampleValidators = [Sample1, Sample2], + + [NewValidator|_] = parse_and_merge( + {validator, "name1", "description2", fun(X) -> X*10 end}, + SampleValidators), + F = func(NewValidator), + ?assertEqual(50, F(5)), + ?assertEqual("description2", description(NewValidator)), + ?assertEqual("name1", name(NewValidator)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTerm} = parse(not_a_raw_validator), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_validator:parse/1 : not_a_raw_validator", + ?XLATE(ErrorTerm)), + ok. + +is_validator_test() -> + ?assert(not(is_validator(not_a_validator))), + + V = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (V#validator.func)(2)), + ?assert(is_validator(V)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_variable.erl b/deps/cuttlefish/src/cuttlefish_variable.erl new file mode 100644 index 0000000000000000000000000000000000000000..08bdf82185f3ec3c9879e454fee7f6da98b6aa42 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_variable.erl @@ -0,0 +1,272 @@ +%% ------------------------------------------------------------------- +%% +%% handles both variable and variable definitions +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_variable). + +-type variable() :: [string()]. +-export_type([variable/0]). + +-ifdef(TEST). +-ifdef(EQC). +-include_lib("eqc/include/eqc.hrl"). +-define(QC_OUT(Prop), on_output(fun(F,A) -> io:format(user, F, A) end, Prop)). +-endif. +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + format/1, + tokenize/1, + split_on_match/1, + replace_match/2, + extract_first_match/2, + fuzzy_matches/2, + is_fuzzy_match/2, + filter_by_prefix/2 +]). + +%% @doc Formats a variable back into its dot-separated version. +%% Inverse of tokenize/1. +-spec format(variable()) -> string(). +format(Key=[H|_]) when is_list(H) -> + Escaped = [re:replace(Word, "[.]", "\\\\&", [{return, list}, global]) || + Word <- Key], + string:join(Escaped, "."). + +%% @doc like string:tokens(Key, "."), but if the dot was escaped +%% i.e. \\., don't tokenize that +-spec tokenize(string()) -> variable(). +tokenize(Key) -> + tokenize(Key, "", []). + +tokenize([$\\, $. |Rest], Part, Acc) -> + tokenize(Rest, [$. |Part], Acc); +tokenize([$. |Rest], Part, Acc) -> + tokenize(Rest, "", [lists:reverse(Part)|Acc]); +tokenize([], "", Acc) -> + lists:reverse(Acc); +tokenize([], Part, Acc) -> + lists:reverse([lists:reverse(Part)|Acc]); +tokenize([Char|Rest], Part, Acc) -> + tokenize(Rest, [Char|Part], Acc). + +%% @doc split a key definition into: +%% * Prefix: Things before the $var +%% * Var: The $var itself +%% * Suffix: Things after the $var +-spec split_on_match(variable()) -> {variable(), string(), variable()}. +split_on_match(Variable) -> + {PrefixToks, MatchGroup, SuffixToks} = lists:foldl( + fun(T, {Prefix, MatchGroup, Suffix}) -> + case {T, MatchGroup} of + {[$$|_], []} -> {Prefix, T, Suffix}; + {_, []} -> {[T|Prefix], MatchGroup, Suffix}; + {_, _} -> {Prefix, MatchGroup, [T|Suffix]} + end + end, + {[], [], []}, + Variable), + { + lists:reverse(PrefixToks), + MatchGroup, + lists:reverse(SuffixToks) + }. + +%% @doc replaces the $var in Key with Sub +-spec replace_match(variable(), string()) -> variable(). +replace_match(Variable, Sub) -> + [ begin + case {H, Sub} of + {$$, undefined} -> T; + {$$, Sub} -> Sub; + _ -> Tok + end + end || [H|T]=Tok <- Variable]. + +-spec extract_first_match(variable(), variable()) -> + nomatch | [{string(), string()}]. +%% If the lengths are equal, try to pair up a fuzzy segment with its match. +extract_first_match(VariableDef, Variable) when length(VariableDef) == length(Variable) -> + extract_first_match(VariableDef, Variable, nomatch); +%% This could never match because they are different lengths. +extract_first_match(_,_) -> nomatch. + +%% We have a perfect match, or no match at all, so return the result. +extract_first_match([], [], Result) when is_list(Result) -> + %% If the Result is 'nomatch', the last function clause will be + %% the only one that matches. + lists:reverse(Result); +%% We found the first fuzzy segment, grab the binding of the segment. +extract_first_match([[$$|_]=Fuzzy|VariableDef], [Value|Variable], nomatch) -> + extract_first_match(VariableDef, Variable, [{Fuzzy, Value}]); +%% We found a fuzzy segment and already have a match, so just recurse. +extract_first_match([[$$|_]=Fuzzy|VariableDef], [Value|Variable], Result) -> + extract_first_match(VariableDef, Variable, [{Fuzzy, Value}|Result]); +%% We found two segments that are static and equal. +extract_first_match([X|VariableDef], [X|Variable], Result) -> + extract_first_match(VariableDef, Variable, Result); +%% Something else happened, so we don't match! +extract_first_match(_,_,_) -> nomatch. + +%% @doc given a KeyDef "a.b.$c.d", what are the possible values for $c +%% in the set of Keys in Conf = [{Key, Value}]? +-spec fuzzy_matches(variable(), cuttlefish_conf:conf()) -> + [{string(), any()}]. +fuzzy_matches(VariableDef, Conf) -> + lists:foldl( + fun({Variable, _}, Acc) -> + case extract_first_match(VariableDef, Variable) of + nomatch -> + Acc; + [Match|_] -> + [Match|Acc] + end + end, [], Conf). + +%% @doc could this fixed Key be a match for the variable key KeyDef? +%% e.g. could a.b.$var.d =:= a.b.c.d? +-spec is_fuzzy_match(variable(), variable()) -> boolean(). +is_fuzzy_match(Variable, VariableDef) -> + case length(Variable) =:= length(VariableDef) of + true -> + Zipped = lists:zip(Variable, VariableDef), + lists:all( + fun({X,Y}) -> + X =:= Y orelse hd(Y) =:= $$ + end, + Zipped); + _ -> false + end. + + +%% @doc For Proplist, return the subset of the proplist that starts +%% with "Key" +-spec filter_by_prefix(string() | [string()], + [{[string()], any()}]) -> + [{[string()], any()}]. +filter_by_prefix([H|_T]=Prefix, Proplist) when is_list(H) -> + [ T || {Key,_}=T <- Proplist, lists:prefix(Prefix, Key) ]; +filter_by_prefix(StringPrefix, Proplist) -> + filter_by_prefix(tokenize(StringPrefix), Proplist). + +-ifdef(TEST). + +tokenize_variable_key_test() -> + ?assertEqual(["a", "b", "c", "d"], (tokenize("a.b.c.d"))), + ?assertEqual(["a", "b.c", "d"], (tokenize("a.b\\.c.d"))), + + %% Covers GH #22 + ?assertEqual( + ["listener", "http"], + (tokenize("listener.http.")) + ), + ok. + +split_variable_on_match_test() -> + ?assertEqual({["a", "b"], "$c", ["d", "e"]}, (split_on_match(["a", "b", "$c", "d", "e"]))), + ?assertEqual({["a", "b", "c", "d", "e"], [], []}, (split_on_match(["a", "b", "c", "d", "e"]))), + ?assertEqual({[], "$a", ["b", "c", "d", "e"]}, (split_on_match(["$a", "b", "c", "d", "e"]))), + ok. + +variable_match_replace_test() -> + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "d"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "e"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "f"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "g"))), + ?assertEqual(["a", "g", "c"], (replace_match(["a", "$b", "c"], "g"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "$b", "c"], undefined))), + + ok. + +fuzzy_variable_match_test() -> + ?assert(is_fuzzy_match(["alpha","bravo","charlie","delta"], ["alpha","bravo","charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","anything","delta"], ["alpha","bravo","$charlie","delta"])), + ?assertNot(is_fuzzy_match(["alpha","bravo.anything","delta"], ["alpha","bravo","charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","any.thing","delta"], ["alpha","bravo","$charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","any.thing.you.need","delta"], ["alpha","bravo","$charlie","delta"])), + ok. + +matches_for_variable_def_test() -> + Conf = [ + {["multi_backend","backend1","storage_backend"], 1}, + {["multi_backend","backend2","storage_backend"], 2}, + {["multi_backend","backend.3","storage_backend"], 3}, + {["multi_backend","backend4","storage_backend"], 4} + ], + + Vars = proplists:get_all_values("$name", + fuzzy_matches(["multi_backend","$name","storage_backend"], Conf) + ), + + ?assertEqual(4, (length(Vars))), + ?assert(lists:member("backend1", Vars)), + ?assert(lists:member("backend2", Vars)), + ?assert(lists:member("backend.3", Vars)), + ?assert(lists:member("backend4", Vars)), + ?assertEqual(4, (length(Vars))), + ok. + +filter_by_variable_starts_with_test() -> + Proplist = [ + {["regular","key"], 1}, + {["other","normal","key"], 2}, + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["interleaved","key"], 5}, + {["prefixed","key3"], 6} + ], + + FilteredByList = filter_by_prefix(["prefixed"], Proplist), + ?assertEqual([ + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["prefixed","key3"], 6} + ], + FilteredByList), + + FilteredByString = filter_by_prefix("prefixed", Proplist), + ?assertEqual([ + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["prefixed","key3"], 6} + ], + FilteredByString), + ok. + +-ifdef(EQC). +variable_roundtrip_test_() -> + {timeout, 15, + [?_assert(quickcheck(eqc:testing_time(3,?QC_OUT(prop_format_tokenize_roundtrip()))))]}. + +prop_format_tokenize_roundtrip() -> + ?FORALL(Variable, non_empty(list(gen_word())), + tokenize(format(Variable)) == Variable). + +gen_word() -> + ?LET(F, non_empty(list(gen_word_char())), lists:flatten(F)). + +gen_word_char() -> + oneof([$., $_, $-, + choose($0, $9), + choose($A, $Z), + choose($a, $z)]). +-endif. +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_vmargs.erl b/deps/cuttlefish/src/cuttlefish_vmargs.erl new file mode 100644 index 0000000000000000000000000000000000000000..89081891366f74787ba963a4874b3f5d4f7ba38e --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_vmargs.erl @@ -0,0 +1,57 @@ +-module(cuttlefish_vmargs). + +-export([stringify/1]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc turns a proplist into a list of strings suitable for vm.args files +-spec stringify([{any(), string()}]) -> [string()]. +stringify(VMArgsProplist) -> + [ stringify_line(K, V) || {K, V} <- VMArgsProplist ]. + + +stringify_line(K, V) when is_list(V) -> + lists:flatten(io_lib:format("~s ~s", [K, V])); +stringify_line(K, V) -> + lists:flatten(io_lib:format("~s ~w", [K, V])). + +-ifdef(TEST). + +stringify_test() -> + VMArgsProplist = [ + {'-name', "dev1@127.0.0.1"}, + {'-setcookie', 'riak'}, + {'-smp', enable}, + {'+W',"w"}, + {'+K',"true"}, + {'+A',"64"}, + {'-env ERL_MAX_PORTS',"64000"}, + {'-env ERL_FULLSWEEP_AFTER',"0"}, + {'-env ERL_CRASH_DUMP',"./log/erl_crash.dump"}, + {'-env ERL_MAX_ETS_TABLES',"256000"}, + {'+P', "256000"}, + {'-kernel net_ticktime', "42"} + ], + + VMArgs = stringify(VMArgsProplist), + + Expected = [ + "-name dev1@127.0.0.1", + "-setcookie riak", + "-smp enable", + "+W w", + "+K true", + "+A 64", + "-env ERL_MAX_PORTS 64000", + "-env ERL_FULLSWEEP_AFTER 0", + "-env ERL_CRASH_DUMP ./log/erl_crash.dump", + "-env ERL_MAX_ETS_TABLES 256000", + "+P 256000", + "-kernel net_ticktime 42" + ], + [ ?assertEqual(E, V) || {E, V} <- lists:zip(Expected, VMArgs)], + ok. + +-endif. diff --git a/deps/cuttlefish/src/lager_stderr_backend.erl b/deps/cuttlefish/src/lager_stderr_backend.erl new file mode 100644 index 0000000000000000000000000000000000000000..75a9753fd75d891594988c55656a079233c4c77e --- /dev/null +++ b/deps/cuttlefish/src/lager_stderr_backend.erl @@ -0,0 +1,351 @@ +%% Copyright (c) 2011-2012 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you under the Apache License, +%% Version 2.0 (the "License"); you may not use this file +%% except in compliance with the License. You may obtain +%% a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. + +%% @doc Console backend for lager. Configured with a single option, the loglevel +%% desired. + +-module(lager_stderr_backend). + +-behaviour(gen_event). + +-export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, + code_change/3]). + +-record(state, {level :: {'mask', integer()}, + formatter :: atom(), + format_config :: any(), + colors=[] :: list()}). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-compile([{parse_transform, lager_transform}]). +-endif. + +-include_lib("lager/include/lager.hrl"). +-define(TERSE_FORMAT,[time, " ", color, "[", severity,"] ", message]). + +%% @private +init([Level, true]) -> % for backwards compatibility + init([Level,{lager_default_formatter,[{eol, eol()}]}]); +init([Level,false]) -> % for backwards compatibility + init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]); +init([Level,{Formatter,FormatterConfig}]) when is_atom(Formatter) -> + Colors = case application:get_env(lager, colored) of + {ok, true} -> + {ok, LagerColors} = application:get_env(lager, colors), + LagerColors; + _ -> [] + end, + + try {is_new_style_console_available(), lager_util:config_to_mask(Level)} of + {false, _} -> + Msg = "Lager's console backend is incompatible with the 'old' shell, not enabling it", + %% be as noisy as possible, log to every possible place + try + alarm_handler:set_alarm({?MODULE, "WARNING: " ++ Msg}) + catch + _:_ -> + error_logger:warning_msg(Msg ++ "~n") + end, + io:format("WARNING: " ++ Msg ++ "~n"), + ?INT_LOG(warning, Msg, []), + {error, {fatal, old_shell}}; + {true, Levels} -> + {ok, #state{level=Levels, + formatter=Formatter, + format_config=FormatterConfig, + colors=Colors}} + catch + _:_ -> + {error, {fatal, bad_log_level}} + end; +init(Level) -> + init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]). + + +%% @private +handle_call(get_loglevel, #state{level=Level} = State) -> + {ok, Level, State}; +handle_call({set_loglevel, Level}, State) -> + try lager_util:config_to_mask(Level) of + Levels -> + {ok, ok, State#state{level=Levels}} + catch + _:_ -> + {ok, {error, bad_log_level}, State} + end; +handle_call(_Request, State) -> + {ok, ok, State}. + +%% @private +handle_event({log, Message}, + #state{level=L,formatter=Formatter,format_config=FormatConfig,colors=Colors} = State) -> + case lager_util:is_loggable(Message, L, ?MODULE) of + true -> + io:put_chars(standard_error, Formatter:format(Message,FormatConfig,Colors)), + {ok, State}; + false -> + {ok, State} + end; +handle_event(_Event, State) -> + {ok, State}. + +%% @private +handle_info(_Info, State) -> + {ok, State}. + +%% @private +terminate(_Reason, _State) -> + ok. + +%% @private +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +eol() -> + case application:get_env(lager, colored) of + {ok, true} -> + "\e[0m\r\n"; + _ -> + "\r\n" + end. + +-ifdef(TEST). +is_new_style_console_available() -> + true. +-else. +is_new_style_console_available() -> + %% Criteria: + %% 1. If the user has specified '-noshell' on the command line, + %% then we will pretend that the new-style console is available. + %% If there is no shell at all, then we don't have to worry + %% about log events being blocked by the old-style shell. + %% 2. Windows doesn't support the new shell, so all windows users + %% have is the oldshell. + %% 3. If the user_drv process iss registered, all is OK. + %% 'user_drv' is a registered proc name used by the "new" + %% console driver. + init:get_argument(noshell) /= error orelse + element(1, os:type()) == win32 orelse + is_pid(whereis(user_drv)). +-endif. + +-ifdef(TEST). +console_log_test_() -> + %% tiny recursive fun that pretends to be a group leader + F = fun(Self) -> + fun() -> + YComb = fun(Fun) -> + receive + {io_request, From, ReplyAs, {put_chars, unicode, _Msg}} = Y -> + From ! {io_reply, ReplyAs, ok}, + Self ! Y, + Fun(Fun); + Other -> + ?debugFmt("unexpected message ~p~n", [Other]), + Self ! Other + end + end, + YComb(YComb) + end + end, + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, []), + application:set_env(lager, error_logger_redirect, false), + lager:start(), + whereis(standard_error) + end, + fun(User) -> + unregister(standard_error), + register(standard_error, User), + application:stop(lager), + error_logger:tty(true) + end, + [ + {"regular console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:log(info, self(), "Test message"), + receive + {io_request, From, ReplyAs, {put_chars, unicode, Msg}} -> + From ! {io_reply, ReplyAs, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[info]", TestMsg], re:split(Msg, " ", [{return, list}, {parts, 3}])) + after + 500 -> + ?assert(false) + end + end + }, + {"verbose console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, [info, true]), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:info("Test message"), + PidStr = pid_to_list(self()), + receive + {io_request, _, _, {put_chars, unicode, Msg}} -> + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, _, "[info]", PidStr, _, TestMsg], re:split(Msg, "[ @]", [{return, list}, {parts, 6}])) + after + 500 -> + ?assert(false) + end + end + }, + {"custom format console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, + [info, {lager_default_formatter, [date,"#",time,"#",severity,"#",node,"#",pid,"#", + module,"#",function,"#",file,"#",line,"#",message,"\r\n"]}]), + lager_config:set(loglevel, {?INFO, []}), + lager:info("Test message"), + PidStr = pid_to_list(self()), + NodeStr = atom_to_list(node()), + ModuleStr = atom_to_list(?MODULE), + receive + {io_request, _, _, {put_chars, unicode, Msg}} -> + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, _, "info", NodeStr, PidStr, ModuleStr, _, _, _, TestMsg], + re:split(Msg, "#", [{return, list}, {parts, 10}])) + after + 500 -> + ?assert(false) + end + end + }, + {"blacklisting a loglevel works", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:set_loglevel(lager_stderr_backend, '!=info'), + erlang:group_leader(Pid, whereis(lager_event)), + lager:debug("Test message"), + receive + {io_request, From1, ReplyAs1, {put_chars, unicode, Msg1}} -> + From1 ! {io_reply, ReplyAs1, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[debug]", TestMsg], re:split(Msg1, " ", [{return, list}, {parts, 3}])) + after + 1000 -> + ?assert(false) + end, + %% info is blacklisted + lager:info("Test message"), + receive + {io_request, From2, ReplyAs2, {put_chars, unicode, _Msg2}} -> + From2 ! {io_reply, ReplyAs2, ok}, + %% OOPS ?assert(false) + ok + after + 500 -> + ?assert(true) + end + end + }, + {"whitelisting a loglevel works", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:set_loglevel(lager_stderr_backend, '=debug'), + erlang:group_leader(Pid, whereis(lager_event)), + lager:debug("Test message"), + receive + {io_request, From1, ReplyAs1, {put_chars, unicode, Msg1}} -> + From1 ! {io_reply, ReplyAs1, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[debug]", TestMsg], re:split(Msg1, " ", [{return, list}, {parts, 3}])) + after + 1000 -> + ?assert(false) + end, + %% info is blacklisted + lager:error("Test message"), + receive + {io_request, From2, ReplyAs2, {put_chars, unicode, _Msg2}} -> + From2 ! {io_reply, ReplyAs2, ok}, + %% OOPS! ?assert(false) + ok + after + 500 -> + ?assert(true) + end + end + } + ] + }. + +set_loglevel_test_() -> + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, [{lager_stderr_backend, info}]), + application:set_env(lager, error_logger_redirect, false), + application:start(lager) + end, + fun(_) -> + application:stop(lager), + error_logger:tty(true) + end, + [ + {"Get/set loglevel test", + fun() -> + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, debug), + ?assertEqual(debug, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, '!=debug'), + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, '!=info'), + ?assertEqual(debug, lager:get_loglevel(lager_stderr_backend)), + ok + end + }, + {"Get/set invalid loglevel test", + fun() -> + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + ?assertEqual({error, bad_log_level}, + lager:set_loglevel(lager_stderr_backend, fatfinger)), + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)) + end + } + + ] + }. + +-endif. diff --git a/deps/eetcd/LICENSE b/deps/eetcd/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..48864f24ac292b7abb8a4b4603c2f3e17a29b971 --- /dev/null +++ b/deps/eetcd/LICENSE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2018, zhongwencool . + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/deps/eetcd/Makefile b/deps/eetcd/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..31c6ea2e3e4ad55c5ed09e05ed0b17b1e2dcde1a --- /dev/null +++ b/deps/eetcd/Makefile @@ -0,0 +1,24 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += -I ./_build/default/plugins/gpb/include + +DEPS += gun +dep_gun = hex 1.3.2 gun + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/eetcd/README.md b/deps/eetcd/README.md new file mode 100644 index 0000000000000000000000000000000000000000..799db1b34e836352cb62f41d36529133ae8e412c --- /dev/null +++ b/deps/eetcd/README.md @@ -0,0 +1,284 @@ +[![Build Status](https://travis-ci.org/zhongwencool/eetcd.svg?branch=master)](https://travis-ci.org/zhongwencool/eetcd) +[![GitHub tag](https://img.shields.io/github/tag/zhongwencool/eetcd.svg)](https://github.com/zhongwencool/eetcd) +[![Hex.pm Version](https://img.shields.io/hexpm/v/eetcd.svg)](https://hex.pm/packages/eetcd) + +eetcd +===== + +Erlang client for the [etcd](https://github.com/etcd-io/etcd) API v3. +`eetcd` aims to be a high-quality, production-ready client for the Protocol Buffer-based etcd v3 API. +All core features are supported. +It includes reconnection, transaction, software transactional memory, high-level query builders and lease management, watchers. + +See [the full API documentation](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md) for more. + +1. Adding, Fetching and Deleting Keys; +2. Transaction; +3. Lease -- as well as a few convenience features like continuous keep alive; +4. Watch; +5. Maintenance -- User, Role, Authentication, Cluster, Alarms; +6. Lock; +7. Election. + +Quick Start +----- +#### 1. Setup +```erlang +## rebar.config +{deps, [eetcd]}. + +``` +zero configuration. + +#### 2. Usage +All etcd3 API's are defined in [gRPC services](https://github.com/etcd-io/etcd/blob/master/etcdserver/etcdserverpb/rpc.proto), which categorize remote procedure calls (RPCs) understood by the etcd server. +A full listing of all etcd RPCs are documented in markdown in the [gRPC API listing](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md). + +Firstly, open eetcd when your application starts. + +```erlang +-module(my_app). +-behaviour(application). +-export([start/2, stop/1]). +-define(NAME, etcd_example_conn). + +start(_StartType, _StartArgs) -> + Endpoints = ["127.0.0.1:2379", "127.0.0.1:2579", "127.0.0.1:2479"], + {ok, _Pid} = eetcd:open(?NAME, Endpoints), + my_sup:start_link(). + +stop(_State) -> + eetcd:close(?NAME), + ok. +``` + +##### KV - Creates, updates, fetches, and deletes key-value pairs. +```erlang + +%% creates +{ok,#{header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 6}}} + = eetcd_kv:put(?NAME, <<"key">>, <<"value">>). + +%% updates +Ctx = eetcd_kv:new(?NAME), +CtxExist = eetcd_kv:with_key(Ctx, <<"KeyExist">>), +Ctx2 = eetcd_kv:with_value(CtxExist, <<"NewValue">>), +Ctx3 = eetcd_kv:with_ignore_value(Ctx2), +{ok,#{header := + #{cluster_id := 11360555963653019356, + member_id := 16409577466894847729,raft_term := 5, + revision := 7}}} + = eetcd_kv:put(Ctx3). + +CtxNoExist = eetcd_kv:with_key(Ctx, <<"KeyNoExist">>), +Ctx5 = eetcd_kv:with_value(CtxNoExist, <<"NewValue">>), +Ctx6 = eetcd_kv:with_ignore_value(Ctx5), + +{error,{grpc_error,#{'grpc-message' := + <<"etcdserver: value is provided">>, + 'grpc-status' := 3}}} + = eetcd_kv:put(Ctx6). + +%% fetches +{ok,#{count := 1, + header := + #{cluster_id := 11360555963653019356, + member_id := 16409577466894847729,raft_term := 5, + revision := 7}, + kvs := + [#{create_revision := 7,key := <<"KeyExist">>,lease := 0, + mod_revision := 7,value := <<"NewValue">>,version := 1}], + more := false}} + = eetcd_kv:get(?NAME, <<"KeyExist">>). +%% fetches all keys +Ctx = eetcd_kv:new(?Name), +Ctx1 = eetcd_kv:with_key(Ctx, "\0"), +Ctx2 = eetcd_kv:with_range_end(Ctx1, "\0"), +Ctx3 = eetcd_kv:with_sort(Ctx2, 'KEY', 'ASCEND'), +{ok,#{count := 2, + header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 7}, + kvs := + [#{create_revision := 7,key := <<"KeyExist">>,lease := 0, + mod_revision := 7,value := <<"NewValue">>,version := 1} + %% .... + ], more := false}} + = eetcd_kv:get(Ctx3). + +%% deletes +{ok,#{deleted := 1, + header := + #{cluster_id := 11360555963653019356, + member_id := 11020526813496739906,raft_term := 5, + revision := 7}, + prev_kvs := []}} + = eetcd_kv:delete(?NAME, "KeyExist"). +%% batch deletes +Ctx = eetcd_kv:new(register), +Ctx1 = eetcd_kv:with_key(Ctx, "K"), +Ctx2 = eetcd_kv:with_prefix(Ctx1), +{ok,#{deleted := 100, + header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 9}, + prev_kvs := []}} + = eetcd_kv:delete(Ctx2). + +``` + +##### Txn - Transaction + +```erlang +%% implement etcd v2 CompareAndSwap by Txn +{ok,#{count := 1, + header := #{revision := Revision}, + kvs := + [#{ mod_revision := ModRev,value := Value}], + more := false}} + = eetcd_kv:get(?NAME, Kv1), + +Cmp = eetcd_compare:new(Kv1), +If = eetcd_compare:mod_revision(Cmp, "=", ModRev), +Then = eetcd_op:put(eetcd_kv:with_value(eetcd_kv:with_key(eetcd_kv:new(), Key), <<"Change", Value/binary>>)), +Else = [], +eetcd_kv:txn(EtcdConnName, If, Then, Else). + +``` + +##### Lease - Primitives for consuming client keep-alive messages. +```erlang + 1> eetcd_lease:grant(Name, TTL), +{ok,#{'ID' => 1076765125482045706,'TTL' => 100,error => <<>>, + header => + #{cluster_id => 11360555963653019356, + member_id => 16409577466894847729,raft_term => 5, + revision => 9}}} +2> eetcd_lease:keep_alive(Name, 1076765125482045706). +{ok,<0.456.0>} + +3> eetcd_lease:leases(Name). +{ok,#{header => + #{cluster_id => 11360555963653019356, + member_id => 11020526813496739906,raft_term => 5, + revision => 9}, + leases => [#{'ID' => 1076765125482045706}]}} + +``` +More detailed examples see [eetcd_kv_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_kv_SUITE.erl) [eetcd_watch_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_watch_SUITE.erl) [eetcd_lease_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_lease_SUITE.erl). + +##### Watch - Monitors changes to keys. +```erlang +-module(watch_example). + +-behaviour(gen_server). +-define(NAME, watch_example_conn). + +-export([start_link/0]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). + +start_link() -> + gen_server:start({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + erlang:process_flag(trap_exit, true), + Registers = ["127.0.0.1:2379", "127.0.0.1:2579", "127.0.0.1:2479"], + {ok, _Pid} = eetcd:open(?NAME, Registers), + ets:new(?MODULE, [named_table, {read_concurrency, true}, public]), + {ok, Services, Revision} = get_exist_services(), + ets:insert(?MODULE, Services), + {ok, Conn} = watch_services_event(Revision), + {ok, Conn}. + +get_exist_services() -> + Ctx = eetcd_kv:new(?NAME), + Ctx1 = eetcd_kv:with_key(Ctx, <<"heartbeat:">>), + Ctx2 = eetcd_kv:with_prefix(Ctx1), + Ctx3 = eetcd_kv:with_keys_only(Ctx2), + {ok, #{header := #{revision := Revision}, kvs := Services}} = eetcd_kv:get(Ctx3), + Services = + [begin + [_, Type, IP, Port] = binary:split(Key, [<<"|">>], [global]), + {{IP, Port}, Type} + end || #{key := Key} <- Services], + {ok, Services, Revision}. + +watch_services_event(Revision) -> + ReqInit = eetcd_watch:new(), + ReqKey = eetcd_watch:with_key(ReqInit, <<"heartbeat:">>), + ReqPrefix = eetcd_watch:with_prefix(ReqKey), + Req = eetcd_watch:with_start_revision(ReqPrefix, Revision), + eetcd_watch:watch(?NAME, Req). + +handle_info(Msg, Conn) -> + case eetcd_watch:watch_stream(Conn, Msg) of + {ok, NewConn, WatchEvent} -> + update_services(WatchEvent), + {noreply, NewConn}; + {more, NewConn} -> + {noreply, NewConn}; + {error, _Reason} -> + #{revision := Revision} = Conn, + {ok, NewConn} = watch_services_event(Revision), + {noreply, NewConn}; + unknown -> + {noreply, Conn} + end. + +handle_call(_Request, _From, Conn) -> + {reply, ok, Conn}. + +handle_cast(_Request, Conn) -> + {noreply, Conn}. + +terminate(_Reason, _Conn) -> + eetcd:close(?NAME), + ok. + +code_change(_OldVsn, Conn, _Extra) -> + {ok, Conn}. + +update_services(#{events := Events}) -> + [begin + [_, Type, IP, Port] = binary:split(Key, [<<"|">>], [global]), + case EventType of + 'PUT' -> ets:insert(?MODULE, {{IP, Port}, Type}); + 'DELETE' -> ets:delete(?MODULE, {IP, Port}) + end + end || #{kv := #{key := Key}, type := EventType} <- Events], + ok. +``` + +##### Election Example +[Election Example](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_election_leader_example.erl) + +##### Debug information +```erlang +1>eetcd:info(). +| Name | Status | IP:Port | Conn | Gun |LeaseNum| +| test | Active |127.0.0.1:2379|<0.535.0> |<0.536.0> | 1 | +| test | Active |127.0.0.1:2579|<0.535.0> |<0.539.0> | 2 | +| Name | Status | IP:Port | Conn | ReconnectSecond | +| test | Freeze |127.0.0.1:2479|<0.535.0> | 1.6 | +``` +- `Active` is normal connection. +- `Freeze` is a broken connection who try to reconnect after `ReconnectSecond`. + +Test +----- + +```erlang +rebar3 ct +``` +Gen proto and client file +----- +```erlang +rebar3 etcd gen +``` + + diff --git a/deps/eetcd/include/eetcd.hrl b/deps/eetcd/include/eetcd.hrl new file mode 100644 index 0000000000000000000000000000000000000000..f3a29438397f8f0cbfe87104b18a46046c7e9a95 --- /dev/null +++ b/deps/eetcd/include/eetcd.hrl @@ -0,0 +1,37 @@ +-ifndef(etcd_hrl). +-define(etcd_hrl, true). +-include_lib("kernel/include/logger.hrl"). + +-define(HEADERS, [{<<"grpc-encoding">>, <<"identity">>}, {<<"content-type">>, <<"application/grpc+proto">>}]). +-define(GRPC_ERROR(Status, Message), {grpc_error, #{'grpc-status' => Status, 'grpc-message' => Message}}). + +-export_type([key/0, value/0, context/0, name/0, grpc_status/0, eetcd_error/0]). +-type key() :: iodata(). +-type value() :: iodata(). +-type context() :: map(). +-type name() :: atom() | reference(). +-type eetcd_error() :: timeout|{grpc_error,grpc_status()}|{gun_down,any()}|{gun_conn_error,any()}|{gun_stream_error,any()}|eetcd_conn_unavailable. +-type grpc_status() :: #{'grpc-status' => integer(), 'grpc-message' => binary()}. + +%% Grpc status code +-define(GRPC_STATUS_OK, 0). +-define(GRPC_STATUS_CANCELLED, 1). +-define(GRPC_STATUS_UNKNOWN, 2). +-define(GRPC_STATUS_INVALID_ARGUMENT, 3). +-define(GRPC_STATUS_DEADLINE_EXCEEDED, 4). +-define(GRPC_STATUS_NOT_FOUND, 5). +-define(GRPC_STATUS_ALREADY_EXISTS, 6). +-define(GRPC_STATUS_PERMISSION_DENIED, 7). +-define(GRPC_STATUS_RESOURCE_EXHAUSTED, 8). +-define(GRPC_STATUS_FAILED_PRECONDITION, 9). +-define(GRPC_STATUS_ABORTED, 10). +-define(GRPC_STATUS_OUT_OF_RANGE, 11). +-define(GRPC_STATUS_UNIMPLEMENTED, 12). +-define(GRPC_STATUS_INTERNAL, 13). +-define(GRPC_STATUS_UNAVAILABLE, 14). +-define(GRPC_STATUS_DATA_LOSS, 15). +-define(GRPC_STATUS_UNAUTHENTICATED, 16). + +-define(ETCD_CONNS, eetcd_conns). +-record(eetcd_conn, {id, gun, conn, token = []}). +-endif. diff --git a/deps/eetcd/priv/protos/auth.proto b/deps/eetcd/priv/protos/auth.proto new file mode 100644 index 0000000000000000000000000000000000000000..731973c4c7a233974e98ce56a6642d7cc6bd2374 --- /dev/null +++ b/deps/eetcd/priv/protos/auth.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package authpb; + +import "gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +message UserAddOptions { + bool no_password = 1; +}; + +// User is a single entry in the bucket authUsers +message User { + bytes name = 1; + bytes password = 2; + repeated string roles = 3; + UserAddOptions options = 4; +} + +// Permission is a single entity +message Permission { + enum Type { + READ = 0; + WRITE = 1; + READWRITE = 2; + } + Type permType = 1; + + bytes key = 2; + bytes range_end = 3; +} + +// Role is a single entry in the bucket authRoles +message Role { + bytes name = 1; + + repeated Permission keyPermission = 2; +} diff --git a/deps/eetcd/priv/protos/gogo.proto b/deps/eetcd/priv/protos/gogo.proto new file mode 100644 index 0000000000000000000000000000000000000000..0da211a8e3ef61eaf0b3a3079f2614bb93ef4d4c --- /dev/null +++ b/deps/eetcd/priv/protos/gogo.proto @@ -0,0 +1,125 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; +package gogoproto; + +import "google/protobuf/descriptor.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "GoGoProtos"; + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + + optional bool sizer_all = 63020; + + optional bool goproto_enum_stringer_all = 63021; + optional bool enum_stringer_all = 63022; + + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool stringer = 67008; + optional bool onlyone = 64009; + + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + + optional bool sizer = 64020; + + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + + optional bool protosizer = 64028; + optional bool compare = 64029; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + + optional bool stdtime = 65010; + optional bool stdduration = 65011; +} diff --git a/deps/eetcd/priv/protos/kv.proto b/deps/eetcd/priv/protos/kv.proto new file mode 100644 index 0000000000000000000000000000000000000000..7aa9ae826e7b123ddd0d9f388b8af478f11a476f --- /dev/null +++ b/deps/eetcd/priv/protos/kv.proto @@ -0,0 +1,49 @@ +syntax = "proto3"; +package mvccpb; + +import "gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +message KeyValue { + // key is the key in bytes. An empty key is not allowed. + bytes key = 1; + // create_revision is the revision of last creation on this key. + int64 create_revision = 2; + // mod_revision is the revision of last modification on this key. + int64 mod_revision = 3; + // version is the version of the key. A deletion resets + // the version to zero and any modification of the key + // increases its version. + int64 version = 4; + // value is the value held by the key, in bytes. + bytes value = 5; + // lease is the ID of the lease that attached to key. + // When the attached lease expires, the key will be deleted. + // If lease is 0, then no lease is attached to the key. + int64 lease = 6; +} + +message Event { + enum EventType { + PUT = 0; + DELETE = 1; + } + // type is the kind of event. If type is a PUT, it indicates + // new data has been stored to the key. If type is a DELETE, + // it indicates the key was deleted. + EventType type = 1; + // kv holds the KeyValue for the event. + // A PUT event contains current kv pair. + // A PUT event with kv.Version=1 indicates the creation of a key. + // A DELETE/EXPIRE event contains the deleted key with + // its modification revision set to the revision of deletion. + KeyValue kv = 2; + + // prev_kv holds the key-value pair before the event happens. + KeyValue prev_kv = 3; +} \ No newline at end of file diff --git a/deps/eetcd/priv/protos/router.proto b/deps/eetcd/priv/protos/router.proto new file mode 100644 index 0000000000000000000000000000000000000000..3f1ba849705dc55703c358412487e1d712b9e268 --- /dev/null +++ b/deps/eetcd/priv/protos/router.proto @@ -0,0 +1,1147 @@ +syntax = "proto3"; +package Etcd; + + +import "gogo.proto"; +import "kv.proto"; +import "auth.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.unmarshaler_all) = true; + +service KV { + // Range gets the keys in the range from the key-value store. + rpc Range(RangeRequest) returns (RangeResponse) { + } + + // Put puts the given key into the key-value store. + // A put request increments the revision of the key-value store + // and generates one event in the event history. + rpc Put(PutRequest) returns (PutResponse) { + } + + // DeleteRange deletes the given range from the key-value store. + // A delete request increments the revision of the key-value store + // and generates a delete event in the event history for every deleted key. + rpc DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse) { + } + + // Txn processes multiple requests in a single transaction. + // A txn request increments the revision of the key-value store + // and generates events with the same revision for every completed request. + // It is not allowed to modify the same key several times within one txn. + rpc Txn(TxnRequest) returns (TxnResponse) { + } + + // Compact compacts the event history in the etcd key-value store. The key-value + // store should be periodically compacted or the event history will continue to grow + // indefinitely. + rpc Compact(CompactionRequest) returns (CompactionResponse) { + } +} + +service Watch { + // Watch watches for events happening or that have happened. Both input and output + // are streams; the input stream is for creating and canceling watchers and the output + // stream sends events. One watch RPC can watch on multiple key ranges, streaming events + // for several watches at once. The entire event history can be watched starting from the + // last compaction revision. + rpc Watch(stream WatchRequest) returns (stream WatchResponse) { + } +} + +service Lease { + // LeaseGrant creates a lease which expires if the server does not receive a keepAlive + // within a given time to live period. All keys attached to the lease will be expired and + // deleted if the lease expires. Each expired key generates a delete event in the event history. + rpc LeaseGrant (LeaseGrantRequest) returns (LeaseGrantResponse) { + } + + // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. + rpc LeaseRevoke (LeaseRevokeRequest) returns (LeaseRevokeResponse) { + } + + // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client + // to the server and streaming keep alive responses from the server to the client. + rpc LeaseKeepAlive (stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) { + } + + // LeaseTimeToLive retrieves lease information. + rpc LeaseTimeToLive (LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) { + } + + // LeaseLeases lists all existing leases. + rpc LeaseLeases (LeaseLeasesRequest) returns (LeaseLeasesResponse) { + } +} + +service Cluster { + // MemberAdd adds a member into the cluster. + rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) { + } + + // MemberRemove removes an existing member from the cluster. + rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) { + } + + // MemberUpdate updates the member configuration. + rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) { + } + + // MemberList lists all the members in the cluster. + rpc MemberList(MemberListRequest) returns (MemberListResponse) { + } + + // MemberPromote promotes a member from raft learner (non-voting) to raft voting member. + rpc MemberPromote(MemberPromoteRequest) returns (MemberPromoteResponse) { + } +} + +service Maintenance { + // Alarm activates, deactivates, and queries alarms regarding cluster health. + rpc Alarm(AlarmRequest) returns (AlarmResponse) { + } + + // Status gets the status of the member. + rpc Status(StatusRequest) returns (StatusResponse) { + } + + // Defragment defragments a member's backend database to recover storage space. + rpc Defragment(DefragmentRequest) returns (DefragmentResponse) { + } + + // Hash computes the hash of whole backend keyspace, + // including key, lease, and other buckets in storage. + // This is designed for testing ONLY! + // Do not rely on this in production with ongoing transactions, + // since Hash operation does not hold MVCC locks. + // Use "HashKV" API instead for "key" bucket consistency checks. + rpc Hash(HashRequest) returns (HashResponse) { + } + + // HashKV computes the hash of all MVCC keys up to a given revision. + // It only iterates "key" bucket in backend storage. + rpc HashKV(HashKVRequest) returns (HashKVResponse) { + } + + // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. + rpc Snapshot(SnapshotRequest) returns (stream SnapshotResponse) { + } + + // MoveLeader requests current leader node to transfer its leadership to transferee. + rpc MoveLeader(MoveLeaderRequest) returns (MoveLeaderResponse) { + } +} + +service Auth { + // AuthEnable enables authentication. + rpc AuthEnable(AuthEnableRequest) returns (AuthEnableResponse) { + } + + // AuthDisable disables authentication. + rpc AuthDisable(AuthDisableRequest) returns (AuthDisableResponse) { + } + + // Authenticate processes an authenticate request. + rpc Authenticate(AuthenticateRequest) returns (AuthenticateResponse) { + } + + // UserAdd adds a new user. User name cannot be empty. + rpc UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse) { + } + + // UserGet gets detailed user information. + rpc UserGet(AuthUserGetRequest) returns (AuthUserGetResponse) { + } + + // UserList gets a list of all users. + rpc UserList(AuthUserListRequest) returns (AuthUserListResponse) { + } + + // UserDelete deletes a specified user. + rpc UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse) { + } + + // UserChangePassword changes the password of a specified user. + rpc UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse) { + } + + // UserGrant grants a role to a specified user. + rpc UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse) { + } + + // UserRevokeRole revokes a role of specified user. + rpc UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse) { + } + + // RoleAdd adds a new role. Role name cannot be empty. + rpc RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse) { + } + + // RoleGet gets detailed role information. + rpc RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse) { + } + + // RoleList gets lists of all roles. + rpc RoleList(AuthRoleListRequest) returns (AuthRoleListResponse) { + } + + // RoleDelete deletes a specified role. + rpc RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse) { + } + + // RoleGrantPermission grants a permission of a specified key or range to a specified role. + rpc RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse) { + } + + // RoleRevokePermission revokes a key or range permission of a specified role. + rpc RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse) { + } +} + + +message ResponseHeader { + // cluster_id is the ID of the cluster which sent the response. + uint64 cluster_id = 1; + // member_id is the ID of the member which sent the response. + uint64 member_id = 2; + // revision is the key-value store revision when the request was applied. + // For watch progress responses, the header.revision indicates progress. All future events + // recieved in this stream are guaranteed to have a higher revision number than the + // header.revision number. + int64 revision = 3; + // raft_term is the raft term when the request was applied. + uint64 raft_term = 4; +} + +message RangeRequest { + enum SortOrder { + NONE = 0; // default, no sorting + ASCEND = 1; // lowest target value first + DESCEND = 2; // highest target value first + } + enum SortTarget { + KEY = 0; + VERSION = 1; + CREATE = 2; + MOD = 3; + VALUE = 4; + } + + // key is the first key for the range. If range_end is not given, the request only looks up key. + bytes key = 1; + // range_end is the upper bound on the requested range [key, range_end). + // If range_end is '\0', the range is all keys >= key. + // If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), + // then the range request gets all keys prefixed with key. + // If both key and range_end are '\0', then the range request returns all keys. + bytes range_end = 2; + // limit is a limit on the number of keys returned for the request. When limit is set to 0, + // it is treated as no limit. + int64 limit = 3; + // revision is the point-in-time of the key-value store to use for the range. + // If revision is less or equal to zero, the range is over the newest key-value store. + // If the revision has been compacted, ErrCompacted is returned as a response. + int64 revision = 4; + + // sort_order is the order for returned sorted results. + SortOrder sort_order = 5; + + // sort_target is the key-value field to use for sorting. + SortTarget sort_target = 6; + + // serializable sets the range request to use serializable member-local reads. + // Range requests are linearizable by default; linearizable requests have higher + // latency and lower throughput than serializable requests but reflect the current + // consensus of the cluster. For better performance, in exchange for possible stale reads, + // a serializable range request is served locally without needing to reach consensus + // with other nodes in the cluster. + bool serializable = 7; + + // keys_only when set returns only the keys and not the values. + bool keys_only = 8; + + // count_only when set returns only the count of the keys in the range. + bool count_only = 9; + + // min_mod_revision is the lower bound for returned key mod revisions; all keys with + // lesser mod revisions will be filtered away. + int64 min_mod_revision = 10; + + // max_mod_revision is the upper bound for returned key mod revisions; all keys with + // greater mod revisions will be filtered away. + int64 max_mod_revision = 11; + + // min_create_revision is the lower bound for returned key create revisions; all keys with + // lesser create revisions will be filtered away. + int64 min_create_revision = 12; + + // max_create_revision is the upper bound for returned key create revisions; all keys with + // greater create revisions will be filtered away. + int64 max_create_revision = 13; +} + +message RangeResponse { + ResponseHeader header = 1; + // kvs is the list of key-value pairs matched by the range request. + // kvs is empty when count is requested. + repeated mvccpb.KeyValue kvs = 2; + // more indicates if there are more keys to return in the requested range. + bool more = 3; + // count is set to the number of keys within the range when requested. + int64 count = 4; +} + +message PutRequest { + // key is the key, in bytes, to put into the key-value store. + bytes key = 1; + // value is the value, in bytes, to associate with the key in the key-value store. + bytes value = 2; + // lease is the lease ID to associate with the key in the key-value store. A lease + // value of 0 indicates no lease. + int64 lease = 3; + + // If prev_kv is set, etcd gets the previous key-value pair before changing it. + // The previous key-value pair will be returned in the put response. + bool prev_kv = 4; + + // If ignore_value is set, etcd updates the key using its current value. + // Returns an error if the key does not exist. + bool ignore_value = 5; + + // If ignore_lease is set, etcd updates the key using its current lease. + // Returns an error if the key does not exist. + bool ignore_lease = 6; +} + +message PutResponse { + ResponseHeader header = 1; + // if prev_kv is set in the request, the previous key-value pair will be returned. + mvccpb.KeyValue prev_kv = 2; +} + +message DeleteRangeRequest { + // key is the first key to delete in the range. + bytes key = 1; + // range_end is the key following the last key to delete for the range [key, range_end). + // If range_end is not given, the range is defined to contain only the key argument. + // If range_end is one bit larger than the given key, then the range is all the keys + // with the prefix (the given key). + // If range_end is '\0', the range is all keys greater than or equal to the key argument. + bytes range_end = 2; + + // If prev_kv is set, etcd gets the previous key-value pairs before deleting it. + // The previous key-value pairs will be returned in the delete response. + bool prev_kv = 3; +} + +message DeleteRangeResponse { + ResponseHeader header = 1; + // deleted is the number of keys deleted by the delete range request. + int64 deleted = 2; + // if prev_kv is set in the request, the previous key-value pairs will be returned. + repeated mvccpb.KeyValue prev_kvs = 3; +} + +message RequestOp { + // request is a union of request types accepted by a transaction. + oneof request { + RangeRequest request_range = 1; + PutRequest request_put = 2; + DeleteRangeRequest request_delete_range = 3; + TxnRequest request_txn = 4; + } +} + +message ResponseOp { + // response is a union of response types returned by a transaction. + oneof response { + RangeResponse response_range = 1; + PutResponse response_put = 2; + DeleteRangeResponse response_delete_range = 3; + TxnResponse response_txn = 4; + } +} + +message Compare { + enum CompareResult { + EQUAL = 0; + GREATER = 1; + LESS = 2; + NOT_EQUAL = 3; + } + enum CompareTarget { + VERSION = 0; + CREATE = 1; + MOD = 2; + VALUE = 3; + LEASE = 4; + } + // result is logical comparison operation for this comparison. + CompareResult result = 1; + // target is the key-value field to inspect for the comparison. + CompareTarget target = 2; + // key is the subject key for the comparison operation. + bytes key = 3; + oneof target_union { + // version is the version of the given key + int64 version = 4; + // create_revision is the creation revision of the given key + int64 create_revision = 5; + // mod_revision is the last modified revision of the given key. + int64 mod_revision = 6; + // value is the value of the given key, in bytes. + bytes value = 7; + // lease is the lease id of the given key. + int64 lease = 8; + // leave room for more target_union field tags, jump to 64 + } + + // range_end compares the given target to all keys in the range [key, range_end). + // See RangeRequest for more details on key ranges. + bytes range_end = 64; + // TODO: fill out with most of the rest of RangeRequest fields when needed. +} + +// From google paxosdb paper: +// Our implementation hinges around a powerful primitive which we call MultiOp. All other database +// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically +// and consists of three components: +// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check +// for the absence or presence of a value, or compare with a given value. Two different tests in the guard +// may apply to the same or different entries in the database. All tests in the guard are applied and +// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise +// it executes f op (see item 3 below). +// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or +// lookup operation, and applies to a single database entry. Two different operations in the list may apply +// to the same or different entries in the database. These operations are executed +// if guard evaluates to +// true. +// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false. +message TxnRequest { + // compare is a list of predicates representing a conjunction of terms. + // If the comparisons succeed, then the success requests will be processed in order, + // and the response will contain their respective responses in order. + // If the comparisons fail, then the failure requests will be processed in order, + // and the response will contain their respective responses in order. + repeated Compare compare = 1; + // success is a list of requests which will be applied when compare evaluates to true. + repeated RequestOp success = 2; + // failure is a list of requests which will be applied when compare evaluates to false. + repeated RequestOp failure = 3; +} + +message TxnResponse { + ResponseHeader header = 1; + // succeeded is set to true if the compare evaluated to true or false otherwise. + bool succeeded = 2; + // responses is a list of responses corresponding to the results from applying + // success if succeeded is true or failure if succeeded is false. + repeated ResponseOp responses = 3; +} + +// CompactionRequest compacts the key-value store up to a given revision. All superseded keys +// with a revision less than the compaction revision will be removed. +message CompactionRequest { + // revision is the key-value store revision for the compaction operation. + int64 revision = 1; + // physical is set so the RPC will wait until the compaction is physically + // applied to the local database such that compacted entries are totally + // removed from the backend database. + bool physical = 2; +} + +message CompactionResponse { + ResponseHeader header = 1; +} + +message HashRequest { +} + +message HashKVRequest { + // revision is the key-value store revision for the hash operation. + int64 revision = 1; +} + +message HashKVResponse { + ResponseHeader header = 1; + // hash is the hash value computed from the responding member's MVCC keys up to a given revision. + uint32 hash = 2; + // compact_revision is the compacted revision of key-value store when hash begins. + int64 compact_revision = 3; +} + +message HashResponse { + ResponseHeader header = 1; + // hash is the hash value computed from the responding member's KV's backend. + uint32 hash = 2; +} + +message SnapshotRequest { +} + +message SnapshotResponse { + // header has the current key-value store information. The first header in the snapshot + // stream indicates the point in time of the snapshot. + ResponseHeader header = 1; + + // remaining_bytes is the number of blob bytes to be sent after this message + uint64 remaining_bytes = 2; + + // blob contains the next chunk of the snapshot in the snapshot stream. + bytes blob = 3; +} + +message WatchRequest { + // request_union is a request to either create a new watcher or cancel an existing watcher. + oneof request_union { + WatchCreateRequest create_request = 1; + WatchCancelRequest cancel_request = 2; + WatchProgressRequest progress_request = 3; + } +} + +message WatchCreateRequest { + // key is the key to register for watching. + bytes key = 1; + + // range_end is the end of the range [key, range_end) to watch. If range_end is not given, + // only the key argument is watched. If range_end is equal to '\0', all keys greater than + // or equal to the key argument are watched. + // If the range_end is one bit larger than the given key, + // then all keys with the prefix (the given key) will be watched. + bytes range_end = 2; + + // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". + int64 start_revision = 3; + + // progress_notify is set so that the etcd server will periodically send a WatchResponse with + // no events to the new watcher if there are no recent events. It is useful when clients + // wish to recover a disconnected watcher starting from a recent known revision. + // The etcd server may decide how often it will send notifications based on current load. + bool progress_notify = 4; + + enum FilterType { + // filter out put event. + NOPUT = 0; + // filter out delete event. + NODELETE = 1; + } + + // filters filter the events at server side before it sends back to the watcher. + repeated FilterType filters = 5; + + // If prev_kv is set, created watcher gets the previous KV before the event happens. + // If the previous KV is already compacted, nothing will be returned. + bool prev_kv = 6; + + // If watch_id is provided and non-zero, it will be assigned to this watcher. + // Since creating a watcher in etcd is not a synchronous operation, + // this can be used ensure that ordering is correct when creating multiple + // watchers on the same stream. Creating a watcher with an ID already in + // use on the stream will cause an error to be returned. + int64 watch_id = 7; + + // fragment enables splitting large revisions into multiple watch responses. + bool fragment = 8; +} + +message WatchCancelRequest { + // watch_id is the watcher id to cancel so that no more events are transmitted. + int64 watch_id = 1; +} + +// Requests the a watch stream progress status be sent in the watch response stream as soon as +// possible. +message WatchProgressRequest { +} + +message WatchResponse { + ResponseHeader header = 1; + // watch_id is the ID of the watcher that corresponds to the response. + int64 watch_id = 2; + + // created is set to true if the response is for a create watch request. + // The client should record the watch_id and expect to receive events for + // the created watcher from the same stream. + // All events sent to the created watcher will attach with the same watch_id. + bool created = 3; + + // canceled is set to true if the response is for a cancel watch request. + // No further events will be sent to the canceled watcher. + bool canceled = 4; + + // compact_revision is set to the minimum index if a watcher tries to watch + // at a compacted index. + // + // This happens when creating a watcher at a compacted revision or the watcher cannot + // catch up with the progress of the key-value store. + // + // The client should treat the watcher as canceled and should not try to create any + // watcher with the same start_revision again. + int64 compact_revision = 5; + + // cancel_reason indicates the reason for canceling the watcher. + string cancel_reason = 6; + + // framgment is true if large watch response was split over multiple responses. + bool fragment = 7; + + repeated mvccpb.Event events = 11; +} + +message LeaseGrantRequest { + // TTL is the advisory time-to-live in seconds. Expired lease will return -1. + int64 TTL = 1; + // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. + int64 ID = 2; +} + +message LeaseGrantResponse { + ResponseHeader header = 1; + // ID is the lease ID for the granted lease. + int64 ID = 2; + // TTL is the server chosen lease time-to-live in seconds. + int64 TTL = 3; + string error = 4; +} + +message LeaseRevokeRequest { + // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. + int64 ID = 1; +} + +message LeaseRevokeResponse { + ResponseHeader header = 1; +} + +message LeaseCheckpoint { + // ID is the lease ID to checkpoint. + int64 ID = 1; + + // Remaining_TTL is the remaining time until expiry of the lease. + int64 remaining_TTL = 2; +} + +message LeaseCheckpointRequest { + repeated LeaseCheckpoint checkpoints = 1; +} + +message LeaseCheckpointResponse { + ResponseHeader header = 1; +} + +message LeaseKeepAliveRequest { + // ID is the lease ID for the lease to keep alive. + int64 ID = 1; +} + +message LeaseKeepAliveResponse { + ResponseHeader header = 1; + // ID is the lease ID from the keep alive request. + int64 ID = 2; + // TTL is the new time-to-live for the lease. + int64 TTL = 3; +} + +message LeaseTimeToLiveRequest { + // ID is the lease ID for the lease. + int64 ID = 1; + // keys is true to query all the keys attached to this lease. + bool keys = 2; +} + +message LeaseTimeToLiveResponse { + ResponseHeader header = 1; + // ID is the lease ID from the keep alive request. + int64 ID = 2; + // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. + int64 TTL = 3; + // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. + int64 grantedTTL = 4; + // Keys is the list of keys attached to this lease. + repeated bytes keys = 5; +} + +message LeaseLeasesRequest { +} + +message LeaseStatus { + int64 ID = 1; + // TODO: int64 TTL = 2; +} + +message LeaseLeasesResponse { + ResponseHeader header = 1; + repeated LeaseStatus leases = 2; +} + +message Member { + // ID is the member ID for this member. + uint64 ID = 1; + // name is the human-readable name of the member. If the member is not started, the name will be an empty string. + string name = 2; + // peerURLs is the list of URLs the member exposes to the cluster for communication. + repeated string peerURLs = 3; + // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. + repeated string clientURLs = 4; + // isLearner indicates if the member is raft learner. + bool isLearner = 5; +} + +message MemberAddRequest { + // peerURLs is the list of URLs the added member will use to communicate with the cluster. + repeated string peerURLs = 1; + // isLearner indicates if the added member is raft learner. + bool isLearner = 2; +} + +message MemberAddResponse { + ResponseHeader header = 1; + // member is the member information for the added member. + Member member = 2; + // members is a list of all members after adding the new member. + repeated Member members = 3; +} + +message MemberRemoveRequest { + // ID is the member ID of the member to remove. + uint64 ID = 1; +} + +message MemberRemoveResponse { + ResponseHeader header = 1; + // members is a list of all members after removing the member. + repeated Member members = 2; +} + +message MemberUpdateRequest { + // ID is the member ID of the member to update. + uint64 ID = 1; + // peerURLs is the new list of URLs the member will use to communicate with the cluster. + repeated string peerURLs = 2; +} + +message MemberUpdateResponse{ + ResponseHeader header = 1; + // members is a list of all members after updating the member. + repeated Member members = 2; +} + +message MemberListRequest { +} + +message MemberListResponse { + ResponseHeader header = 1; + // members is a list of all members associated with the cluster. + repeated Member members = 2; +} + +message MemberPromoteRequest { + // ID is the member ID of the member to promote. + uint64 ID = 1; +} + +message MemberPromoteResponse { + ResponseHeader header = 1; + // members is a list of all members after promoting the member. + repeated Member members = 2; +} + +message DefragmentRequest { +} + +message DefragmentResponse { + ResponseHeader header = 1; +} + +message MoveLeaderRequest { + // targetID is the node ID for the new leader. + uint64 targetID = 1; +} + +message MoveLeaderResponse { + ResponseHeader header = 1; +} + +enum AlarmType { + NONE = 0; // default, used to query if any alarm is active + NOSPACE = 1; // space quota is exhausted + CORRUPT = 2; // kv store corruption detected +} + +message AlarmRequest { + enum AlarmAction { + GET = 0; + ACTIVATE = 1; + DEACTIVATE = 2; + } + // action is the kind of alarm request to issue. The action + // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a + // raised alarm. + AlarmAction action = 1; + // memberID is the ID of the member associated with the alarm. If memberID is 0, the + // alarm request covers all members. + uint64 memberID = 2; + // alarm is the type of alarm to consider for this request. + AlarmType alarm = 3; +} + +message AlarmMember { + // memberID is the ID of the member associated with the raised alarm. + uint64 memberID = 1; + // alarm is the type of alarm which has been raised. + AlarmType alarm = 2; +} + +message AlarmResponse { + ResponseHeader header = 1; + // alarms is a list of alarms associated with the alarm request. + repeated AlarmMember alarms = 2; +} + +message StatusRequest { +} + +message StatusResponse { + ResponseHeader header = 1; + // version is the cluster protocol version used by the responding member. + string version = 2; + // dbSize is the size of the backend database physically allocated, in bytes, of the responding member. + int64 dbSize = 3; + // leader is the member ID which the responding member believes is the current leader. + uint64 leader = 4; + // raftIndex is the current raft committed index of the responding member. + uint64 raftIndex = 5; + // raftTerm is the current raft term of the responding member. + uint64 raftTerm = 6; + // raftAppliedIndex is the current raft applied index of the responding member. + uint64 raftAppliedIndex = 7; + // errors contains alarm/health information and status. + repeated string errors = 8; + // dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member. + int64 dbSizeInUse = 9; + // isLearner indicates if the member is raft learner. + bool isLearner = 10; +} + +message AuthEnableRequest { +} + +message AuthDisableRequest { +} + +message AuthenticateRequest { + string name = 1; + string password = 2; +} + +message AuthUserAddRequest { + string name = 1; + string password = 2; + authpb.UserAddOptions options = 3; +} + +message AuthUserGetRequest { + string name = 1; +} + +message AuthUserDeleteRequest { + // name is the name of the user to delete. + string name = 1; +} + +message AuthUserChangePasswordRequest { + // name is the name of the user whose password is being changed. + string name = 1; + // password is the new password for the user. + string password = 2; +} + +message AuthUserGrantRoleRequest { + // user is the name of the user which should be granted a given role. + string user = 1; + // role is the name of the role to grant to the user. + string role = 2; +} + +message AuthUserRevokeRoleRequest { + string name = 1; + string role = 2; +} + +message AuthRoleAddRequest { + // name is the name of the role to add to the authentication system. + string name = 1; +} + +message AuthRoleGetRequest { + string role = 1; +} + +message AuthUserListRequest { +} + +message AuthRoleListRequest { +} + +message AuthRoleDeleteRequest { + string role = 1; +} + +message AuthRoleGrantPermissionRequest { + // name is the name of the role which will be granted the permission. + string name = 1; + // perm is the permission to grant to the role. + authpb.Permission perm = 2; +} + +message AuthRoleRevokePermissionRequest { + string role = 1; + bytes key = 2; + bytes range_end = 3; +} + +message AuthEnableResponse { + ResponseHeader header = 1; +} + +message AuthDisableResponse { + ResponseHeader header = 1; +} + +message AuthenticateResponse { + ResponseHeader header = 1; + // token is an authorized token that can be used in succeeding RPCs + string token = 2; +} + +message AuthUserAddResponse { + ResponseHeader header = 1; +} + +message AuthUserGetResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserDeleteResponse { + ResponseHeader header = 1; +} + +message AuthUserChangePasswordResponse { + ResponseHeader header = 1; +} + +message AuthUserGrantRoleResponse { + ResponseHeader header = 1; +} + +message AuthUserRevokeRoleResponse { + ResponseHeader header = 1; +} + +message AuthRoleAddResponse { + ResponseHeader header = 1; +} + +message AuthRoleGetResponse { + ResponseHeader header = 1; + + repeated authpb.Permission perm = 2; +} + +message AuthRoleListResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserListResponse { + ResponseHeader header = 1; + + repeated string users = 2; +} + +message AuthRoleDeleteResponse { + ResponseHeader header = 1; +} + +message AuthRoleGrantPermissionResponse { + ResponseHeader header = 1; +} + +message AuthRoleRevokePermissionResponse { + ResponseHeader header = 1; +} + +message HealthCheckRequest { + string service = 1; +} + +message HealthCheckResponse { + enum ServingStatus { + UNKNOWN = 0; + SERVING = 1; + NOT_SERVING = 2; + SERVICE_UNKNOWN = 3; // Used only by the Watch method. + } + ServingStatus status = 1; +} + +service Health { + // If the requested service is unknown, the call will fail with status + // NOT_FOUND. + rpc Check(HealthCheckRequest) returns (HealthCheckResponse); + + // Performs a watch for the serving status of the requested service. + // The server will immediately send back a message indicating the current + // serving status. It will then subsequently send a new message whenever + // the service's serving status changes. + // + // If the requested service is unknown when the call is received, the + // server will send a message setting the serving status to + // SERVICE_UNKNOWN but will *not* terminate the call. If at some + // future point, the serving status of the service becomes known, the + // server will send a new message with the service's serving status. + // + // If the call terminates with status UNIMPLEMENTED, then clients + // should assume this method is not supported and should not retry the + // call. If the call terminates with any other status (including OK), + // clients should retry the call with appropriate exponential backoff. + rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse); +} + +message LockRequest { + // name is the identifier for the distributed shared lock to be acquired. + bytes name = 1; + // lease is the ID of the lease that will be attached to ownership of the + // lock. If the lease expires or is revoked and currently holds the lock, + // the lock is automatically released. Calls to Lock with the same lease will + // be treated as a single acquisition; locking twice with the same lease is a + // no-op. + int64 lease = 2; +} + +message LockResponse { + ResponseHeader header = 1; + // key is a key that will exist on etcd for the duration that the Lock caller + // owns the lock. Users should not modify this key or the lock may exhibit + // undefined behavior. + bytes key = 2; +} + +message UnlockRequest { + // key is the lock ownership key granted by Lock. + bytes key = 1; +} + +message UnlockResponse { + ResponseHeader header = 1; +} + +// The lock service exposes client-side locking facilities as a gRPC interface. +service Lock { + // Lock acquires a distributed shared lock on a given named lock. + // On success, it will return a unique key that exists so long as the + // lock is held by the caller. This key can be used in conjunction with + // transactions to safely ensure updates to etcd only occur while holding + // lock ownership. The lock is held until Unlock is called on the key or the + // lease associate with the owner expires. + rpc Lock(LockRequest) returns (LockResponse) { + } + + // Unlock takes a key returned by Lock and releases the hold on lock. The + // next Lock caller waiting for the lock will then be woken up and given + // ownership of the lock. + rpc Unlock(UnlockRequest) returns (UnlockResponse) { + } +} + +// The election service exposes client-side election facilities as a gRPC interface. +service Election { + // Campaign waits to acquire leadership in an election, returning a LeaderKey + // representing the leadership if successful. The LeaderKey can then be used + // to issue new values on the election, transactionally guard API requests on + // leadership still being held, and resign from the election. + rpc Campaign(CampaignRequest) returns (CampaignResponse) { + } + // Proclaim updates the leader's posted value with a new value. + rpc Proclaim(ProclaimRequest) returns (ProclaimResponse) { + } + // Leader returns the current election proclamation, if any. + rpc Leader(LeaderRequest) returns (LeaderResponse) { + } + // Observe streams election proclamations in-order as made by the election's + // elected leaders. + rpc Observe(stream LeaderRequest) returns (stream LeaderResponse) { + } + // Resign releases election leadership so other campaigners may acquire + // leadership on the election. + rpc Resign(ResignRequest) returns (ResignResponse) { + } +} + +message CampaignRequest { + // name is the election's identifier for the campaign. + bytes name = 1; + // lease is the ID of the lease attached to leadership of the election. If the + // lease expires or is revoked before resigning leadership, then the + // leadership is transferred to the next campaigner, if any. + int64 lease = 2; + // value is the initial proclaimed value set when the campaigner wins the + // election. + bytes value = 3; +} + +message CampaignResponse { + ResponseHeader header = 1; + // leader describes the resources used for holding leadership of the election. + LeaderKey leader = 2; +} + +message LeaderKey { + // name is the election identifier that corresponds to the leadership key. + bytes name = 1; + // key is an opaque key representing the ownership of the election. If the key + // is deleted, then leadership is lost. + bytes key = 2; + // rev is the creation revision of the key. It can be used to test for ownership + // of an election during transactions by testing the key's creation revision + // matches rev. + int64 rev = 3; + // lease is the lease ID of the election leader. + int64 lease = 4; +} + +message LeaderRequest { + // name is the election identifier for the leadership information. + bytes name = 1; +} + +message LeaderResponse { + ResponseHeader header = 1; + // kv is the key-value pair representing the latest leader update. + mvccpb.KeyValue kv = 2; +} + +message ResignRequest { + // leader is the leadership to relinquish by resignation. + LeaderKey leader = 1; +} + +message ResignResponse { + ResponseHeader header = 1; +} + +message ProclaimRequest { + // leader is the leadership hold on the election. + LeaderKey leader = 1; + // value is an update meant to overwrite the leader's current value. + bytes value = 2; +} + +message ProclaimResponse { + ResponseHeader header = 1; +} \ No newline at end of file diff --git a/deps/eetcd/rebar.config b/deps/eetcd/rebar.config new file mode 100644 index 0000000000000000000000000000000000000000..ff574d5b01b7997b71c74eb694ff2fbea99efe03 --- /dev/null +++ b/deps/eetcd/rebar.config @@ -0,0 +1,30 @@ +{erl_opts, [{i, "./_build/default/plugins/gpb/include"}]}. +{deps, [ + {gun, "1.3.2"} +]}. + + +{gpb_opts, [ + {recursive, false}, + {i, "priv/protos"}, + {ipath, "_build/default/plugins/gpb/priv/proto3/"}, + use_packages, + {module_name_suffix, "_pb"}, + {o_erl, "src/protos"}, + {o_hrl, "include"}, + {strings_as_binaries, true}, + maps, + {maps_unset_optional, omitted}, + type_specs]}. + +{provider_hooks, [ + {pre, [ + {compile, {protobuf, compile}}, + {clean, {protobuf, clean}} + ]} +]}. + +{plugins, [ + {rebar3_gpb_plugin, "2.13.1"}, + {rebar3_eetcd_plugin, "0.3.0"} +]}. diff --git a/deps/eetcd/rebar.lock b/deps/eetcd/rebar.lock new file mode 100644 index 0000000000000000000000000000000000000000..fccbeaf7e78903a3cbf6eba0aedf3af501a20160 --- /dev/null +++ b/deps/eetcd/rebar.lock @@ -0,0 +1,8 @@ +{"1.1.0", +[{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.6.0">>},1}, + {<<"gun">>,{pkg,<<"gun">>,<<"1.3.2">>},0}]}. +[ +{pkg_hash,[ + {<<"cowlib">>, <<"8AA629F81A0FC189F261DC98A42243FA842625FEEA3C7EC56C48F4CCDB55490F">>}, + {<<"gun">>, <<"542064CBB9F613650B8A8100B3A927505F364FBE198B7A5A112868FF43F3E477">>}]} +]. diff --git a/deps/eetcd/src/clients/eetcd_auth_gen.erl b/deps/eetcd/src/clients/eetcd_auth_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..a513a30c4d7bac1bcd7addc83e805d1a4c3c8975 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_auth_gen.erl @@ -0,0 +1,124 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Auth +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_auth_gen). + +-export([auth_enable/1]). +-export([auth_disable/1]). +-export([authenticate/1]). +-export([user_add/1]). +-export([user_get/1]). +-export([user_list/1]). +-export([user_delete/1]). +-export([user_change_password/1]). +-export([user_grant_role/1]). +-export([user_revoke_role/1]). +-export([role_add/1]). +-export([role_get/1]). +-export([role_list/1]). +-export([role_delete/1]). +-export([role_grant_permission/1]). +-export([role_revoke_permission/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/AuthEnable" +-spec auth_enable(router_pb:'Etcd.AuthEnableRequest'()) -> + {ok, router_pb:'Etcd.AuthEnableResponse'()}|{error,eetcd:eetcd_error()}. +auth_enable(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthEnableRequest', <<"/etcdserverpb.Auth/AuthEnable">>, 'Etcd.AuthEnableResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/AuthDisable" +-spec auth_disable(router_pb:'Etcd.AuthDisableRequest'()) -> + {ok, router_pb:'Etcd.AuthDisableResponse'()}|{error,eetcd:eetcd_error()}. +auth_disable(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthDisableRequest', <<"/etcdserverpb.Auth/AuthDisable">>, 'Etcd.AuthDisableResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/Authenticate" +-spec authenticate(router_pb:'Etcd.AuthenticateRequest'()) -> + {ok, router_pb:'Etcd.AuthenticateResponse'()}|{error,eetcd:eetcd_error()}. +authenticate(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthenticateRequest', <<"/etcdserverpb.Auth/Authenticate">>, 'Etcd.AuthenticateResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserAdd" +-spec user_add(router_pb:'Etcd.AuthUserAddRequest'()) -> + {ok, router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd:eetcd_error()}. +user_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserAddRequest', <<"/etcdserverpb.Auth/UserAdd">>, 'Etcd.AuthUserAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserGet" +-spec user_get(router_pb:'Etcd.AuthUserGetRequest'()) -> + {ok, router_pb:'Etcd.AuthUserGetResponse'()}|{error,eetcd:eetcd_error()}. +user_get(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserGetRequest', <<"/etcdserverpb.Auth/UserGet">>, 'Etcd.AuthUserGetResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserList" +-spec user_list(router_pb:'Etcd.AuthUserListRequest'()) -> + {ok, router_pb:'Etcd.AuthUserListResponse'()}|{error,eetcd:eetcd_error()}. +user_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserListRequest', <<"/etcdserverpb.Auth/UserList">>, 'Etcd.AuthUserListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserDelete" +-spec user_delete(router_pb:'Etcd.AuthUserDeleteRequest'()) -> + {ok, router_pb:'Etcd.AuthUserDeleteResponse'()}|{error,eetcd:eetcd_error()}. +user_delete(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserDeleteRequest', <<"/etcdserverpb.Auth/UserDelete">>, 'Etcd.AuthUserDeleteResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserChangePassword" +-spec user_change_password(router_pb:'Etcd.AuthUserChangePasswordRequest'()) -> + {ok, router_pb:'Etcd.AuthUserChangePasswordResponse'()}|{error,eetcd:eetcd_error()}. +user_change_password(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserChangePasswordRequest', <<"/etcdserverpb.Auth/UserChangePassword">>, 'Etcd.AuthUserChangePasswordResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserGrantRole" +-spec user_grant_role(router_pb:'Etcd.AuthUserGrantRoleRequest'()) -> + {ok, router_pb:'Etcd.AuthUserGrantRoleResponse'()}|{error,eetcd:eetcd_error()}. +user_grant_role(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserGrantRoleRequest', <<"/etcdserverpb.Auth/UserGrantRole">>, 'Etcd.AuthUserGrantRoleResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserRevokeRole" +-spec user_revoke_role(router_pb:'Etcd.AuthUserRevokeRoleRequest'()) -> + {ok, router_pb:'Etcd.AuthUserRevokeRoleResponse'()}|{error,eetcd:eetcd_error()}. +user_revoke_role(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserRevokeRoleRequest', <<"/etcdserverpb.Auth/UserRevokeRole">>, 'Etcd.AuthUserRevokeRoleResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleAdd" +-spec role_add(router_pb:'Etcd.AuthRoleAddRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleAddResponse'()}|{error,eetcd:eetcd_error()}. +role_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleAddRequest', <<"/etcdserverpb.Auth/RoleAdd">>, 'Etcd.AuthRoleAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleGet" +-spec role_get(router_pb:'Etcd.AuthRoleGetRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleGetResponse'()}|{error,eetcd:eetcd_error()}. +role_get(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleGetRequest', <<"/etcdserverpb.Auth/RoleGet">>, 'Etcd.AuthRoleGetResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleList" +-spec role_list(router_pb:'Etcd.AuthRoleListRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleListResponse'()}|{error,eetcd:eetcd_error()}. +role_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleListRequest', <<"/etcdserverpb.Auth/RoleList">>, 'Etcd.AuthRoleListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleDelete" +-spec role_delete(router_pb:'Etcd.AuthRoleDeleteRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleDeleteResponse'()}|{error,eetcd:eetcd_error()}. +role_delete(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleDeleteRequest', <<"/etcdserverpb.Auth/RoleDelete">>, 'Etcd.AuthRoleDeleteResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleGrantPermission" +-spec role_grant_permission(router_pb:'Etcd.AuthRoleGrantPermissionRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleGrantPermissionResponse'()}|{error,eetcd:eetcd_error()}. +role_grant_permission(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleGrantPermissionRequest', <<"/etcdserverpb.Auth/RoleGrantPermission">>, 'Etcd.AuthRoleGrantPermissionResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleRevokePermission" +-spec role_revoke_permission(router_pb:'Etcd.AuthRoleRevokePermissionRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleRevokePermissionResponse'()}|{error,eetcd:eetcd_error()}. +role_revoke_permission(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleRevokePermissionRequest', <<"/etcdserverpb.Auth/RoleRevokePermission">>, 'Etcd.AuthRoleRevokePermissionResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_cluster_gen.erl b/deps/eetcd/src/clients/eetcd_cluster_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..f339612dd2580f049c17d5700ffc54b9a333efe4 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_cluster_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Cluster +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_cluster_gen). + +-export([member_add/1]). +-export([member_remove/1]). +-export([member_update/1]). +-export([member_list/1]). +-export([member_promote/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberAdd" +-spec member_add(router_pb:'Etcd.MemberAddRequest'()) -> + {ok, router_pb:'Etcd.MemberAddResponse'()}|{error,eetcd:eetcd_error()}. +member_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberAddRequest', <<"/etcdserverpb.Cluster/MemberAdd">>, 'Etcd.MemberAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberRemove" +-spec member_remove(router_pb:'Etcd.MemberRemoveRequest'()) -> + {ok, router_pb:'Etcd.MemberRemoveResponse'()}|{error,eetcd:eetcd_error()}. +member_remove(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberRemoveRequest', <<"/etcdserverpb.Cluster/MemberRemove">>, 'Etcd.MemberRemoveResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberUpdate" +-spec member_update(router_pb:'Etcd.MemberUpdateRequest'()) -> + {ok, router_pb:'Etcd.MemberUpdateResponse'()}|{error,eetcd:eetcd_error()}. +member_update(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberUpdateRequest', <<"/etcdserverpb.Cluster/MemberUpdate">>, 'Etcd.MemberUpdateResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberList" +-spec member_list(router_pb:'Etcd.MemberListRequest'()) -> + {ok, router_pb:'Etcd.MemberListResponse'()}|{error,eetcd:eetcd_error()}. +member_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberListRequest', <<"/etcdserverpb.Cluster/MemberList">>, 'Etcd.MemberListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberPromote" +-spec member_promote(router_pb:'Etcd.MemberPromoteRequest'()) -> + {ok, router_pb:'Etcd.MemberPromoteResponse'()}|{error,eetcd:eetcd_error()}. +member_promote(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberPromoteRequest', <<"/etcdserverpb.Cluster/MemberPromote">>, 'Etcd.MemberPromoteResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_election_gen.erl b/deps/eetcd/src/clients/eetcd_election_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..8b3dd65b7e0ac71208059fd7da342fd3da0ca2f0 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_election_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Election +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:46+00:00 and should not be modified manually + +-module(eetcd_election_gen). + +-export([campaign/1]). +-export([proclaim/1]). +-export([leader/1]). +-export([observe/1]). +-export([resign/1]). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Campaign" +-spec campaign(router_pb:'Etcd.CampaignRequest'()) -> + {ok, router_pb:'Etcd.CampaignResponse'()}|{error,eetcd:eetcd_error()}. +campaign(Request) -> + eetcd_stream:unary(Request, 'Etcd.CampaignRequest', <<"/v3electionpb.Election/Campaign">>, 'Etcd.CampaignResponse'). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Proclaim" +-spec proclaim(router_pb:'Etcd.ProclaimRequest'()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()}|{error,eetcd:eetcd_error()}. +proclaim(Request) -> + eetcd_stream:unary(Request, 'Etcd.ProclaimRequest', <<"/v3electionpb.Election/Proclaim">>, 'Etcd.ProclaimResponse'). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Leader" +-spec leader(router_pb:'Etcd.LeaderRequest'()) -> + {ok, router_pb:'Etcd.LeaderResponse'()}|{error,eetcd:eetcd_error()}. +leader(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaderRequest', <<"/v3electionpb.Election/Leader">>, 'Etcd.LeaderResponse'). + +%% @doc Stream RPC +-spec observe(router_pb:'Etcd.LeaderRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +observe(Request) -> + eetcd_stream:new(Request, <<"/v3electionpb.Election/Observe">>). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Resign" +-spec resign(router_pb:'Etcd.ResignRequest'()) -> + {ok, router_pb:'Etcd.ResignResponse'()}|{error,eetcd:eetcd_error()}. +resign(Request) -> + eetcd_stream:unary(Request, 'Etcd.ResignRequest', <<"/v3electionpb.Election/Resign">>, 'Etcd.ResignResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_health_gen.erl b/deps/eetcd/src/clients/eetcd_health_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..5e7dda0241108e72de88930a505cbc4567b312a2 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_health_gen.erl @@ -0,0 +1,26 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Health +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_health_gen). + +-export([check/1]). +-export([watch/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Health/Check" +-spec check(router_pb:'Etcd.HealthCheckRequest'()) -> + {ok, router_pb:'Etcd.HealthCheckResponse'()}|{error,eetcd:eetcd_error()}. +check(Request) -> + eetcd_stream:unary(Request, 'Etcd.HealthCheckRequest', <<"/etcdserverpb.Health/Check">>, 'Etcd.HealthCheckResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Health/Watch" +-spec watch(router_pb:'Etcd.HealthCheckRequest'()) -> + {ok, router_pb:'Etcd.HealthCheckResponse'()}|{error,eetcd:eetcd_error()}. +watch(Request) -> + eetcd_stream:unary(Request, 'Etcd.HealthCheckRequest', <<"/etcdserverpb.Health/Watch">>, 'Etcd.HealthCheckResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_kv_gen.erl b/deps/eetcd/src/clients/eetcd_kv_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..32c07ad54e0785a69d2122c9ad0724c45646a330 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_kv_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.KV +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_kv_gen). + +-export([range/1]). +-export([put/1]). +-export([delete_range/1]). +-export([txn/1]). +-export([compact/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Range" +-spec range(router_pb:'Etcd.RangeRequest'()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error,eetcd:eetcd_error()}. +range(Request) -> + eetcd_stream:unary(Request, 'Etcd.RangeRequest', <<"/etcdserverpb.KV/Range">>, 'Etcd.RangeResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Put" +-spec put(router_pb:'Etcd.PutRequest'()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error,eetcd:eetcd_error()}. +put(Request) -> + eetcd_stream:unary(Request, 'Etcd.PutRequest', <<"/etcdserverpb.KV/Put">>, 'Etcd.PutResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/DeleteRange" +-spec delete_range(router_pb:'Etcd.DeleteRangeRequest'()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error,eetcd:eetcd_error()}. +delete_range(Request) -> + eetcd_stream:unary(Request, 'Etcd.DeleteRangeRequest', <<"/etcdserverpb.KV/DeleteRange">>, 'Etcd.DeleteRangeResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Txn" +-spec txn(router_pb:'Etcd.TxnRequest'()) -> + {ok, router_pb:'Etcd.TxnResponse'()}|{error,eetcd:eetcd_error()}. +txn(Request) -> + eetcd_stream:unary(Request, 'Etcd.TxnRequest', <<"/etcdserverpb.KV/Txn">>, 'Etcd.TxnResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Compact" +-spec compact(router_pb:'Etcd.CompactionRequest'()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error,eetcd:eetcd_error()}. +compact(Request) -> + eetcd_stream:unary(Request, 'Etcd.CompactionRequest', <<"/etcdserverpb.KV/Compact">>, 'Etcd.CompactionResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_lease_gen.erl b/deps/eetcd/src/clients/eetcd_lease_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..b24a5db4b415cf13edf7586e2c3756f28fbc9cd2 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_lease_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Lease +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_lease_gen). + +-export([lease_grant/1]). +-export([lease_revoke/1]). +-export([lease_keep_alive/1]). +-export([lease_time_to_live/1]). +-export([lease_leases/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseGrant" +-spec lease_grant(router_pb:'Etcd.LeaseGrantRequest'()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error,eetcd:eetcd_error()}. +lease_grant(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseGrantRequest', <<"/etcdserverpb.Lease/LeaseGrant">>, 'Etcd.LeaseGrantResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseRevoke" +-spec lease_revoke(router_pb:'Etcd.LeaseRevokeRequest'()) -> + {ok, router_pb:'Etcd.LeaseRevokeResponse'()}|{error,eetcd:eetcd_error()}. +lease_revoke(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseRevokeRequest', <<"/etcdserverpb.Lease/LeaseRevoke">>, 'Etcd.LeaseRevokeResponse'). + +%% @doc Stream RPC +-spec lease_keep_alive(router_pb:'Etcd.LeaseKeepAliveRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +lease_keep_alive(Request) -> + eetcd_stream:new(Request, <<"/etcdserverpb.Lease/LeaseKeepAlive">>). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseTimeToLive" +-spec lease_time_to_live(router_pb:'Etcd.LeaseTimeToLiveRequest'()) -> + {ok, router_pb:'Etcd.LeaseTimeToLiveResponse'()}|{error,eetcd:eetcd_error()}. +lease_time_to_live(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseTimeToLiveRequest', <<"/etcdserverpb.Lease/LeaseTimeToLive">>, 'Etcd.LeaseTimeToLiveResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseLeases" +-spec lease_leases(router_pb:'Etcd.LeaseLeasesRequest'()) -> + {ok, router_pb:'Etcd.LeaseLeasesResponse'()}|{error,eetcd:eetcd_error()}. +lease_leases(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseLeasesRequest', <<"/etcdserverpb.Lease/LeaseLeases">>, 'Etcd.LeaseLeasesResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_lock_gen.erl b/deps/eetcd/src/clients/eetcd_lock_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..baf0fddf4cc4bb5e4de6e2316c58916a32f65436 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_lock_gen.erl @@ -0,0 +1,26 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Lock +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:46+00:00 and should not be modified manually + +-module(eetcd_lock_gen). + +-export([lock/1]). +-export([unlock/1]). + +%% @doc Unary RPC for service at path "/v3lockpb.Lock/Lock" +-spec lock(router_pb:'Etcd.LockRequest'()) -> + {ok, router_pb:'Etcd.LockResponse'()}|{error,eetcd:eetcd_error()}. +lock(Request) -> + eetcd_stream:unary(Request, 'Etcd.LockRequest', <<"/v3lockpb.Lock/Lock">>, 'Etcd.LockResponse'). + +%% @doc Unary RPC for service at path "/v3lockpb.Lock/Unlock" +-spec unlock(router_pb:'Etcd.UnlockRequest'()) -> + {ok, router_pb:'Etcd.UnlockResponse'()}|{error,eetcd:eetcd_error()}. +unlock(Request) -> + eetcd_stream:unary(Request, 'Etcd.UnlockRequest', <<"/v3lockpb.Lock/Unlock">>, 'Etcd.UnlockResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_maintenance_gen.erl b/deps/eetcd/src/clients/eetcd_maintenance_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..f7393f9750ef6b5cda33d4249c06b45267b977e8 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_maintenance_gen.erl @@ -0,0 +1,61 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Maintenance +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_maintenance_gen). + +-export([alarm/1]). +-export([status/1]). +-export([defragment/1]). +-export([hash/1]). +-export([hash_kv/1]). +-export([snapshot/1]). +-export([move_leader/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Alarm" +-spec alarm(router_pb:'Etcd.AlarmRequest'()) -> + {ok, router_pb:'Etcd.AlarmResponse'()}|{error,eetcd:eetcd_error()}. +alarm(Request) -> + eetcd_stream:unary(Request, 'Etcd.AlarmRequest', <<"/etcdserverpb.Maintenance/Alarm">>, 'Etcd.AlarmResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Status" +-spec status(router_pb:'Etcd.StatusRequest'()) -> + {ok, router_pb:'Etcd.StatusResponse'()}|{error,eetcd:eetcd_error()}. +status(Request) -> + eetcd_stream:unary(Request, 'Etcd.StatusRequest', <<"/etcdserverpb.Maintenance/Status">>, 'Etcd.StatusResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Defragment" +-spec defragment(router_pb:'Etcd.DefragmentRequest'()) -> + {ok, router_pb:'Etcd.DefragmentResponse'()}|{error,eetcd:eetcd_error()}. +defragment(Request) -> + eetcd_stream:unary(Request, 'Etcd.DefragmentRequest', <<"/etcdserverpb.Maintenance/Defragment">>, 'Etcd.DefragmentResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Hash" +-spec hash(router_pb:'Etcd.HashRequest'()) -> + {ok, router_pb:'Etcd.HashResponse'()}|{error,eetcd:eetcd_error()}. +hash(Request) -> + eetcd_stream:unary(Request, 'Etcd.HashRequest', <<"/etcdserverpb.Maintenance/Hash">>, 'Etcd.HashResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/HashKV" +-spec hash_kv(router_pb:'Etcd.HashKVRequest'()) -> + {ok, router_pb:'Etcd.HashKVResponse'()}|{error,eetcd:eetcd_error()}. +hash_kv(Request) -> + eetcd_stream:unary(Request, 'Etcd.HashKVRequest', <<"/etcdserverpb.Maintenance/HashKV">>, 'Etcd.HashKVResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Snapshot" +-spec snapshot(router_pb:'Etcd.SnapshotRequest'()) -> + {ok, router_pb:'Etcd.SnapshotResponse'()}|{error,eetcd:eetcd_error()}. +snapshot(Request) -> + eetcd_stream:unary(Request, 'Etcd.SnapshotRequest', <<"/etcdserverpb.Maintenance/Snapshot">>, 'Etcd.SnapshotResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/MoveLeader" +-spec move_leader(router_pb:'Etcd.MoveLeaderRequest'()) -> + {ok, router_pb:'Etcd.MoveLeaderResponse'()}|{error,eetcd:eetcd_error()}. +move_leader(Request) -> + eetcd_stream:unary(Request, 'Etcd.MoveLeaderRequest', <<"/etcdserverpb.Maintenance/MoveLeader">>, 'Etcd.MoveLeaderResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_watch_gen.erl b/deps/eetcd/src/clients/eetcd_watch_gen.erl new file mode 100644 index 0000000000000000000000000000000000000000..8a51accfef6be30a2b99e9fc5052f86487094efb --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_watch_gen.erl @@ -0,0 +1,19 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Watch +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_watch_gen). + +-export([watch/1]). + +%% @doc Stream RPC +-spec watch(router_pb:'Etcd.WatchRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +watch(Request) -> + eetcd_stream:new(Request, <<"/etcdserverpb.Watch/Watch">>). + diff --git a/deps/eetcd/src/eetcd.app.src b/deps/eetcd/src/eetcd.app.src new file mode 100644 index 0000000000000000000000000000000000000000..d45916b27347f7cc8ad51feeb431429f7611d0ce --- /dev/null +++ b/deps/eetcd/src/eetcd.app.src @@ -0,0 +1,10 @@ +{application,eetcd, + [{description,"ETCD V3 client"}, + {vsn,"0.3.2"}, + {registered,[eetcd_sup,eetcd_conn_sup,eetcd_lease_sup]}, + {mod,{eetcd_app,[]}}, + {applications,[kernel,stdlib,gun]}, + {env,[]}, + {modules,[]}, + {licenses,["Apache 2.0"]}, + {links,[{"Github","https://github.com/zhongwencool/eetcd"}]}]}. diff --git a/deps/eetcd/src/eetcd.erl b/deps/eetcd/src/eetcd.erl new file mode 100644 index 0000000000000000000000000000000000000000..040ae74d13bf20fcd2a5aceb1434e06b9f9ce3e2 --- /dev/null +++ b/deps/eetcd/src/eetcd.erl @@ -0,0 +1,119 @@ +-module(eetcd). +-include("eetcd.hrl"). +%% API +-export([open/2, open/4, open/5, close/1]). +-export([info/0]). +-export([new/1, with_timeout/2]). +-export([get_prefix_range_end/1]). + +%% @doc Connects to a etcd server on TCP port +%% Port on the host with IP address Address, such as: +%% `open(test,["127.0.0.1:2379","127.0.0.1:2479","127.0.0.1:2579"]).' +-spec open(name(), [string()]) -> {ok, pid()} | {error, any()}. +open(Name, Hosts) -> + open(Name, Hosts, [], tcp, []). + +%% @doc Connects to a etcd server. +-spec open(name(), + [string()], + tcp | tls | ssl, + [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok, pid()} | {error, any()}. +open(Name, Hosts, Transport, TransportOpts) -> + open(Name, Hosts, [], Transport, TransportOpts). + +%% @doc Connects to a etcd server. +%% ssl:connect_option() see all options in ssl_api.hrl +%% such as [{certfile, Certfile}, {keyfile, Keyfile}] or [{cert, Cert}, {key, Key}]. +%% +%% Default mode is `connect_all', it creates multiple sub-connections (one sub-connection per each endpoint). +%% The balancing policy is round robin. +%% For instance, in 5-node cluster, `connect_all' would require 5 TCP connections, +%% This may consume more resources but provide more flexible load balance with better failover performance. +%% `eetcd_conn' will do his best to keep all connections normal, and try to reconnect when connection is broken. +%% The reconnect millisecond is 200 400 800 1600 3200 6400 12800 25600, and keep recycling this reconnection time until normal. +%% +%% `{mode, random}' creates only one connection to a random endpoint, +%% it would pick one address and use it to send all client requests. +%% The pinned address is maintained until the client connection is closed. +%% When the client receives an error, it randomly picks another normal endpoint. +%% +%% `[{name, string()},{password, string()}]' generates an authentication token based on a given user name and password. +%% +%% You can use `eetcd:info/0' to see the internal connection status. +-spec open(name(), + [string()], + [{mode, connect_all|random} |{name, string()} | {password, string()}], + tcp | tls | ssl, + [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok, pid()} | {error, any()}. +open(Name, Hosts, Options, Transport, TransportOpts) -> + Cluster = [begin [IP, Port] = string:tokens(Host, ":"), {IP, list_to_integer(Port)} end || Host <- Hosts], + eetcd_conn_sup:start_child([{Name, Cluster, Options, Transport, TransportOpts}]). + +%% @doc close connections with etcd server. +-spec close(name()) -> ok | {error, eetcd_conn_unavailable}. +close(Name) -> + case eetcd_conn:lookup(Name) of + {ok, Pid} -> eetcd_conn:close(Pid); + Err -> Err + end. + +%%% @doc etcd's overview. +-spec info() -> any(). +info() -> + Leases = eetcd_lease_sup:info(), + Conns = eetcd_conn_sup:info(), + io:format("|\e[4m\e[48;2;80;80;80m Name | Status | IP:Port | Conn | Gun |LeaseNum\e[0m|~n"), + [begin + {Name, #{etcd := Etcd, active_conns := Actives}} = Conn, + [begin + io:format("| ~-15.15s| Active |~s:~w|~p |~p |~7.7w | ~n", [Name, IP, Port, Etcd, Gun, maps:get(Gun, Leases, 0)]) + end || {{IP, Port}, Gun, _Token} <- Actives] + end || Conn <- Conns], + io:format("|\e[4m\e[48;2;184;0;0m Name | Status | IP:Port | Conn | ReconnectSecond \e[49m\e[0m|~n"), + [begin + {Name, #{etcd := Etcd, freeze_conns := Freezes}} = Conn, + [begin + io:format("| ~-15.15s| Freeze |~s:~w|~p | ~-15.15w | ~n", [Name, IP, Port, Etcd, Ms / 1000]) + end || {{IP, Port}, Ms} <- Freezes] + end || Conn <- Conns], + ok. + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(ConnName) when is_atom(ConnName) orelse is_reference(ConnName) -> #{eetcd_conn_name => ConnName}; +new(Context) when is_map(Context) -> Context. + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) when is_integer(Timeout); Timeout == infinity -> + case Timeout < 100 of + true -> + Reason = + lists:flatten( + io_lib:format("Setting timeout to ~wms(less than 100ms) is not allowed", [Timeout])), + throw({error, Reason}); + false -> ok + end, + maps:put(eetcd_reply_timeout, Timeout, Context). + +-define(UNBOUND_RANGE_END, "\0"). + +get_prefix_range_end(Key) -> + case eetcd_data_coercion:to_list(Key) of + [] -> ?UNBOUND_RANGE_END; + List0 when is_list(List0) -> + %% find last character < 0xff (255) + {Prefix, Suffix} = lists:splitwith(fun(Ch) -> Ch < 255 end, List0), + case Prefix of + %% keys where all characters >= 0xff are returned as is + [] -> Key; + Prefix -> + %% advance the last character + Ord = lists:last(Prefix), + lists:droplast(Prefix) ++ [Ord + 1] ++ Suffix + end + end. diff --git a/deps/eetcd/src/eetcd_app.erl b/deps/eetcd/src/eetcd_app.erl new file mode 100644 index 0000000000000000000000000000000000000000..2b0fccda0844e2dfbea7d4afde4bd3eb5a60ab7b --- /dev/null +++ b/deps/eetcd/src/eetcd_app.erl @@ -0,0 +1,13 @@ +%% @private +-module(eetcd_app). + +-behaviour(application). + +%% Application callbacks +-export([start/2, stop/1]). + +start(_StartType, _StartArgs) -> + eetcd_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/eetcd/src/eetcd_auth.erl b/deps/eetcd/src/eetcd_auth.erl new file mode 100644 index 0000000000000000000000000000000000000000..fc978faff022f3d96e7d144d1e404207944d941e --- /dev/null +++ b/deps/eetcd/src/eetcd_auth.erl @@ -0,0 +1,361 @@ +-module(eetcd_auth). +-include("eetcd.hrl"). + +%% API +-export([new/1, with_timeout/2]). +-export([auth_enable/1, auth_disable/1]). +-export([user_add/2, user_add/3, user_get/2, + user_list/1, user_delete/2, user_change_password/3, + user_grant_role/3, user_revoke_role/3 +]). +-export([role_add/2, role_get/2, role_list/1, role_delete/2, + role_grant_permission/5, role_revoke_permission/4 +]). + +%%% @doc AuthEnable enables auth of an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:auth_enable(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.auth_enable() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec auth_enable(name()|context()) -> + {ok,router_pb:'Etcd.AuthEnableResponse'()}|{error,eetcd_error()}. +auth_enable(Context) -> + eetcd_auth_gen:auth_enable(new(Context)). + +%%% @doc AuthDisable disables auth of an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:auth_disable(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.auth_disable() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec auth_disable(name()|context()) -> + {ok,router_pb:'Etcd.AuthDisableResponse'()}|{error,eetcd_error()}. +auth_disable(Context) -> + eetcd_auth_gen:auth_disable(new(Context)). + +%%% @doc UserAdd adds a new user with password to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_add(ConnName, Name, Password)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name, password) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_add(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd_error()}. +user_add(Context, Name, Password) -> + C1 = new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(password, Password, C2), + eetcd_auth_gen:user_add(C3). + +%%% @doc UserAdd adds a new user without password to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_add(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_add(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd_error()}. +user_add(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(options, #{no_password => true}, C2), + eetcd_auth_gen:user_add(C3). + +%%% @doc UserDelete deletes a user from an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_delete(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_delete(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_delete(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserDeleteResponse'()}|{error,eetcd_error()}. +user_delete(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:user_delete(C2). + +%%% @doc UserChangePassword changes a password of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_change_password(ConnName, Name, Password)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_change_password(name, password) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_change_password(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserChangePasswordResponse'()}|{error,eetcd_error()}. +user_change_password(Context, Name, Password) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(password, Password, C2), + eetcd_auth_gen:user_change_password(C3). + +%%% @doc UserGrantRole grants a role to a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_grant_role(ConnName, User, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_grant_role(user, role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_grant_role(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserGrantRoleResponse'()}|{error,eetcd_error()}. +user_grant_role(Context, User, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(user, User, C1), + C3 = maps:put(role, Role, C2), + eetcd_auth_gen:user_grant_role(C3). + +%%% @doc UserGet gets a detailed information of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_get(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_get(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_get(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserGetResponse'()}|{error,eetcd_error()}. +user_get(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:user_get(C2). + +%%% @doc UserList gets a list of all users. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> eetcd_auth:user_list() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_list(name()|context()) -> + {ok,router_pb:'Etcd.AuthUserListResponse'()}|{error,eetcd_error()}. +user_list(Context) -> + eetcd_auth_gen:user_list(eetcd:new(Context)). + +%%% @doc UserRevokeRole revokes a role of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_revoke_role(ConnName, Name, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_revoke_role(name, role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_revoke_role(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserRevokeRoleResponse'()}|{error,eetcd_error()}. +user_revoke_role(Context, Name, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(role, Role, C2), + eetcd_auth_gen:user_revoke_role(C3). + +%%% @doc RoleAdd adds a new role to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_add(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_add(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_add(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleAddResponse'()}|{error,eetcd_error()}. +role_add(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:role_add(C2). + +%%% @doc RoleGrantPermission grants a permission to a role. +%%% PermType: 'READ' | 'WRITE' | 'READWRITE' +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_grant_permission(ConnName, Name, Key, RangeEnd, 'READ')'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name, key, rangeEnd, :'WRITE') +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_grant_permission(name()|context(), iodata(), iodata(), iodata(), 'READ' | 'WRITE' | 'READWRITE') -> + {ok,router_pb:'Etcd.AuthRoleGrantPermissionResponse'()}|{error,eetcd_error()}. +role_grant_permission(Context, Name, Key, RangeEnd, PermType) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + Permission = #{key => Key, range_end => RangeEnd, permType => PermType}, + C3 = maps:put(perm, Permission, C2), + eetcd_auth_gen:role_grant_permission(C3). + +%%% @doc RoleGet gets a detailed information of a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_get(ConnName, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_get(role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_get(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleGetResponse'()}|{error,eetcd_error()}. +role_get(Context, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + eetcd_auth_gen:role_get(C2). + +%%% @doc RoleList gets a list of all roles. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_list() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_list(name()|context()) -> + {ok,router_pb:'Etcd.AuthRoleListResponse'()}|{error,eetcd_error()}. +role_list(Context) -> + eetcd_auth_gen:role_list(eetcd:new(Context)). + +%%% @doc RoleRevokePermission revokes a permission from a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_revoke_permission(ConnName, Role, Key, RangeEnd)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_revoke_permission(role, key, rangeEnd) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_revoke_permission(name()|context(), iodata(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleRevokePermissionResponse'()}|{error,eetcd_error()}. +role_revoke_permission(Context, Role, Key, RangeEnd) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + C3 = maps:put(key, Key, C2), + C4 = maps:put(range_end, RangeEnd, C3), + eetcd_auth_gen:role_revoke_permission(C4). + +%%% @doc RoleDelete deletes a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_delete(ConnName, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_delete(role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_delete(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleDeleteResponse'()}|{error,eetcd_error()}. +role_delete(Context, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + eetcd_auth_gen:role_delete(C2). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). diff --git a/deps/eetcd/src/eetcd_cluster.erl b/deps/eetcd/src/eetcd_cluster.erl new file mode 100644 index 0000000000000000000000000000000000000000..9c471cae3da3deb0ae73e00dbb588e56030b81c5 --- /dev/null +++ b/deps/eetcd/src/eetcd_cluster.erl @@ -0,0 +1,151 @@ +-module(eetcd_cluster). + +%% API +-include("eetcd.hrl"). +-export([new/1, with_timeout/2]). +-export([member_list/1]). +-export([member_add/2, member_add_as_learner/2]). +-export([member_remove/2]). +-export([member_update/3]). +-export([member_promote/2]). + +%%% @doc MemberList lists the current cluster membership. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_list() +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_list(context()|name()) -> + {ok,router_pb:'Etcd.MemberListResponse'()}|{error,eetcd_error()}. +member_list(Context) -> eetcd_cluster_gen:member_list(new(Context)). + +%% @doc MemberAdd adds a new member into the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_add(ConnName, ["http://127.0.0.1:2380"])'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_add(["http://127.0.0.1:2380"]) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_add(context()|name(), PeerURLs) -> + {ok,router_pb:'Etcd.MemberListResponse'()} + | {error, {'grpc_error', non_neg_integer(), binary()}} | {error, term()} + when PeerURLs :: [iodata()]. +member_add(Context, PeerAddrs) when is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put(peerURLs, PeerAddrs, C1), + C3 = maps:put(isLearner, false, C2), + eetcd_cluster_gen:member_add(C3). + +%% @doc MemberAddAsLearner adds a new learner member into the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_add_as_learner(ConnName, ["http://127.0.0.1:2380"])'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_add_as_learner(["http://127.0.0.1:2380"]) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_add_as_learner(context()|name(), PeerURLs) -> + {ok,router_pb:'Etcd.MemberListResponse'()} + | {error, {'grpc_error', non_neg_integer(), binary()}} | {error, term()} + when PeerURLs :: [iodata()]. +member_add_as_learner(Context, PeerAddrs) when is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put(peerURLs, PeerAddrs, C1), + C3 = maps:put(isLearner, true, C2), + eetcd_cluster_gen:member_add(C3). + +%% @doc MemberRemove removes an existing member from the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_remove(ConnName, Id)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_remove(id) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_remove(context()|name(), pos_integer()) -> + {ok,router_pb:'Etcd.MemberRemoveResponse'()}|{error,eetcd_error()}. +member_remove(Context, Id) when is_integer(Id) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + eetcd_cluster_gen:member_remove(C2). + +%% @doc MemberUpdate updates the peer addresses of the member. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_update(ConnName, Id, PeerAddrs)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_remove(id, peerAddrs) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_update(context()|name(), pos_integer(), [list()]) -> + {ok,router_pb:'Etcd.MemberUpdateResponse'()}|{error,eetcd_error()}. +member_update(Context, Id, PeerAddrs) + when is_integer(Id) andalso is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + C3 = maps:put(peerURLs, PeerAddrs, C2), + eetcd_cluster_gen:member_update(C3). + +%% @doc MemberPromote promotes a member from raft learner (non-voting) to raft voting member. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_promote(ConnName, Id)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_promote(id) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_promote(context()|name(), pos_integer()) -> + {ok,router_pb:'Etcd.MemberPromoteResponse'()}|{error,eetcd_error()}. +member_promote(Context, Id) when is_integer(Id) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + eetcd_cluster_gen:member_promote(C2). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). diff --git a/deps/eetcd/src/eetcd_compare.erl b/deps/eetcd/src/eetcd_compare.erl new file mode 100644 index 0000000000000000000000000000000000000000..86802bae86c9542dac9fa54d25da903926bd1f55 --- /dev/null +++ b/deps/eetcd/src/eetcd_compare.erl @@ -0,0 +1,60 @@ +-module(eetcd_compare). + +-export([new/1, with_range_end/2]). +-export([value/3, version/3, + mod_revision/3, create_revision/3, + lease/3]). + +new(Key) -> #{key => Key}. + +%% WithRange sets the comparison to scan the range [key, end). +with_range_end(Cmp, End) -> Cmp#{range_end => End}. + +value(Cmp, Result, Value) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'VALUE', + target_union => {value, Value} + }). + +version(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'VERSION', + target_union => {version, Version} + }). + +mod_revision(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'MOD', + target_union => {mod_revision, Version} + }). + +create_revision(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'CREATE', + target_union => {create_revision, Version} + }). + +lease(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'LEASE', + target_union => {lease, Version} + }). + + +to_result("=") -> 'EQUAL'; +to_result("==") -> 'EQUAL'; +to_result("!=") -> 'NOT_EQUAL'; +to_result("=/=") -> 'NOT_EQUAL'; +to_result(">") -> 'GREATER'; +to_result("<") -> 'LESS'. + diff --git a/deps/eetcd/src/eetcd_conn.erl b/deps/eetcd/src/eetcd_conn.erl new file mode 100644 index 0000000000000000000000000000000000000000..b6183777b338d5f1ab862300176ee5425879a20b --- /dev/null +++ b/deps/eetcd/src/eetcd_conn.erl @@ -0,0 +1,462 @@ +%% @private +-module(eetcd_conn). +-include("eetcd.hrl"). + +-behaviour(gen_statem). + +%% API +-export([open/1, close/1, + round_robin_select/1, lookup/1, + check_health/1, flush_token/2]). + +-export([init/1, handle_event/4, terminate/3, + code_change/4, callback_mode/0, format_status/2]). + +-define(ready, ready). +-define(reconnect, reconnect). + +-define(check_health, check_health_msg). +-define(flush_token, flush_token_msg). + +%%% 200 400 800 1600 3200 6400 12800 25600 +-define(MIN_RECONN, 200). +-define(MAX_RECONN, 25600). + +%%%=================================================================== +%%% API +%%%=================================================================== + +open(Args) -> + case gen_statem:start_link(?MODULE, Args, []) of + {ok, Pid} -> {ok, Pid}; + {error, {shutdown, Err}} -> Err + end. + +close(Pid) -> + gen_statem:stop(Pid). + +round_robin_select(Name) -> + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_', token = H, gun = G})when N =:= Name -> {H, G} end), + MS = [{#eetcd_conn{id = {'_', '$1'}, gun = '$2', token = '$3', _ = '_'}, + [{'=:=', '$1', {const, Name}}], + [{{'$2', '$3'}}]}], + case ets:select(?ETCD_CONNS, MS) of + [] -> {error, eetcd_conn_unavailable}; + [{Gun, undefined}] -> {ok, Gun, ?HEADERS}; + [{Gun, Token}] -> {ok, Gun, [{<<"authorization">>, Token} | ?HEADERS]}; + [Uniq] -> Uniq; + Lists -> + Length = erlang:length(Lists), + Index = ets:update_counter(?ETCD_CONNS, Name, {1, 1, Length, 1}, {1, Name}), + case lists:nth(Index, Lists) of + {Gun, undefined} -> {ok, Gun, ?HEADERS}; + {Gun, Token} -> {ok, Gun, [{<<"authorization">>, Token} | ?HEADERS]} + end + end. + +lookup(Name) when is_atom(Name) orelse is_reference(Name) -> + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_', conn = G})when N =:= Name -> G end), + MS = [{#eetcd_conn{id = {'_', '$1'}, conn = '$2', _ = '_'}, + [{'=:=', '$1', {const, Name}}], + ['$2']}], + case ets:select(?ETCD_CONNS, MS) of + [] -> {error, eetcd_conn_unavailable}; + [Pid | _] -> {ok, Pid} + end. + +check_health(Name) -> + case lookup(Name) of + {ok, Pid} -> erlang:send(Pid, ?check_health); + Err -> Err + end. + +flush_token(Gun, Headers) -> + Token = proplists:get_value(<<"authorization">>, Headers), + %% ets:fun2ms(fun(#eetcd_conn{gun = G, _ = '_', conn = C})when G =:= Pid -> C end), + MS = [{#eetcd_conn{id = '_', gun = '$1', conn = '$2', _ = '_'}, + [{'=:=', '$1', {const, Gun}}], + ['$2']}], + [Pid | _] = ets:select(?ETCD_CONNS, MS), + NewToken = gen_statem:call(Pid, {?flush_token, Gun, Token}), + lists:keyreplace(<<"authorization">>, 1, Headers, {<<"authorization">>, NewToken}). +%%%=================================================================== +%%% gen_statem callbacks +%%%=================================================================== +init({Name, Hosts, Options, Transport, TransportOpts}) -> + erlang:process_flag(trap_exit, true), + GunOpts = #{protocols => [http2], + http2_opts => #{keepalive => 45000}, + retry => 0, + transport => Transport, + transport_opts => TransportOpts + }, + Data0 = #{ + name => Name, + gun_opts => GunOpts, + health_ref => undefined, + reconn_ref => undefined, + active_conns => [] + }, + Data = put_in_authenticate(Data0, Options), + case proplists:get_value(mode, Options, connect_all) of + connect_all -> + connect_all(Hosts, Name, GunOpts, Data); + random -> + Length = erlang:length(Hosts), + Data1 = Data#{endpoints => shuffle(Hosts), mode => random}, + Index = rand:uniform(Length), + connect_one(Index, 2 * Length, Data1, Length) + end. + +callback_mode() -> [handle_event_function]. + +format_status(_Opt, [_PDict, StateName, Data]) -> + #{'StateName' => StateName, 'StateData' => Data}. + +handle_event({call, From}, {?flush_token, Gun, Token}, _StateName, Data) -> + {NewToken, NewData} = do_flush_token(Gun, Token, Data), + {keep_state, NewData, [{reply, From, NewToken}]}; +handle_event(info, {'DOWN', _GunRef, process, Gun, _Reason}, _StateName, Data) -> + handle_conn_down(Data, Gun); +handle_event(info, {gun_down, Gun, http2, _Error, _KilledStreams, _UnprocessedStreams}, _StateName, Data) -> + handle_conn_down(Data, Gun); +handle_event(EventType, reconnecting, _StateName, Data) + when EventType =:= internal orelse EventType =:= info -> + reconnect_conns(Data); +handle_event(info, ?check_health, _StateName, Data) -> + {keep_state, do_check_health(Data)}; +handle_event(internal, ?ready, ?ready, #{name := Name}) -> + ?LOG_INFO("ETCD(~p, ~p)'s connections are ready.", [Name, self()]), + keep_state_and_data; +handle_event(EventType, EventContent, StateName, Data) -> + ?LOG_ERROR("~p: unknow event ~p ~p ~p ~n", + [{?MODULE, self()}, {EventType, EventContent}, StateName, Data]), + keep_state_and_data. + +terminate(_Reason, _StateName, Data) -> + #{name := Name, active_conns := Actives} = Data, + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_'})-> N =:= Name end), + MS = [{#eetcd_conn{id = {'_', '$1'}, _ = '_'}, [], [{'=:=', '$1', {const, Name}}]}], + ets:select_delete(?ETCD_CONNS, MS), + ets:match_delete(?ETCD_CONNS, {'_', Name}), + [begin gun:close(Gun) end || {_Host, Gun, _Token} <- Actives], + ok. + +code_change(_OldVsn, StateName, Data, _Extra) -> + {ok, StateName, Data}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== + +connect_all(Hosts, Name, GunOpts, Data) -> + Auth = maps:get(authenticate, Data, undefined), + case fold_connect(Hosts, Name, GunOpts, Auth, [], []) of + {Ok, []} -> + {ok, ?ready, Data#{ + mode => connect_all, + health_ref => next_check_health(), + active_conns => Ok, + freeze_conns => []}}; + {Ok, Failed} when length(Ok) > length(Failed) -> + Freezes = [{Host, ?MIN_RECONN} || {Host, _Reason} <- Failed], + {ok, ?reconnect, Data#{ + mode => connect_all, + health_ref => next_check_health(), + active_conns => Ok, + freeze_conns => Freezes}, + {next_event, internal, reconnecting}}; + {Ok, Failed} -> + [begin gun:close(G) end || {_Host, G, _Auth} <- Ok], + {stop, {shutdown, Failed}} + end. + +connect_one(Index, Retry, Data, Len) -> + #{endpoints := Hosts, name := Name, gun_opts := GunOpts} = Data, + case lookup(Name) of + {ok, _Pid} -> + {stop, {shutdown, {error, already_started}}}; + {error, eetcd_conn_unavailable} -> + Auth = maps:get(authenticate, Data, undefined), + Host = lists:nth(Index, Hosts), + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, AuthToken} -> + {ok, ?ready, Data#{ + index => Index, + health_ref => next_check_health(), + active_conns => [{Host, Gun, AuthToken}]}}; + {error, Reason} when Retry =< 0 -> + {stop, {shutdown, Reason}}; + {error, Reason} -> + ?LOG_WARNING("~p failed to connect ETCD host: ~p ~p~n", + [Name, Host, Reason]), + NewIndex = (Index + 1) rem Len + 1, + connect_one(NewIndex, Retry - 1, Data, Len) + end + end. + +fold_connect([], _Name, _GunOpts, _Auth, Ok, Fail) -> {Ok, Fail}; +fold_connect([Host | Hosts], Name, GunOpts, Auth, Ok, Fail) -> + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, Token} -> + NewOk = [{Host, Gun, Token} | Ok], + fold_connect(Hosts, Name, GunOpts, Auth, NewOk, Fail); + {error, Reason} -> + ?LOG_ERROR("Failed to connect ETCD: ~p by ~p", [Host, Reason]), + NewFail = [{Host, Reason} | Fail], + fold_connect(Hosts, Name, GunOpts, Auth, Ok, NewFail) + end. + +connect(Name, {IP, Port}, GunOpts, Auth) -> + {ok, Gun} = gun:open(IP, Port, GunOpts), + case gun:await_up(Gun, 1000) of + {ok, http2} -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> + case token_remote(Gun, Auth) of + {ok, Token} -> + try_update_conn(IP, Port, Name, Gun, Token); + {error, AuthReason} -> + exit_conn("Authenticate", Gun, AuthReason, Name, IP, Port) + end; + {error, LeaderReason} -> + exit_conn("No Leader", Gun, LeaderReason, Name, IP, Port) + end; + {error, HealthReason} -> + exit_conn("GRPC Unhealthy", Gun, HealthReason, Name, IP, Port) + end; + {error, GunReason} -> + exit_conn("Gun Down", Gun, GunReason, Name, IP, Port) + end. + +try_update_conn(IP, Port, Name, Gun, Token) -> + Conn = #eetcd_conn{id = {{IP, Port}, Name}, + gun = Gun, token = Token, + conn = self()}, + case ets:insert_new(?ETCD_CONNS, Conn) of + false -> + gun:close(Gun), + {error, already_started}; + true -> + erlang:monitor(process, Gun), + ?LOG_INFO("~p connect to ~p:~p gun(~p) successed~n", + [Name, IP, Port, Gun]), + {ok, Gun, Token} + end. + +exit_conn(Log, Gun, Reason, Name, IP, Port) -> + gun:close(Gun), + ?LOG_WARNING("~p failed to connect [~s:~p] by <~s> ~p~n", + [Name, IP, Port, Log, Reason]), + {error, Reason}. + +handle_conn_down(#{mode := connect_all} = Data, Gun) -> freeze_conn(Data, Gun); +handle_conn_down(#{mode := random} = Data, Gun) -> clean_stale_conn(Data, Gun). + +freeze_conn(Data, Gun) -> + #{active_conns := Actives, freeze_conns := Freezes, name := Name} = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, _, _}, NewActives} -> + ets:delete(?ETCD_CONNS, {Endpoint, Name}), + gun:close(Gun), + NewData = Data#{active_conns => NewActives, freeze_conns => [{Endpoint, ?MIN_RECONN} | Freezes]}, + {next_state, ?reconnect, NewData, {next_event, internal, reconnecting}}; + false when Freezes =:= [] -> + {next_state, ?ready, Data}; + false -> + {next_state, ?reconnect, Data, {next_event, internal, reconnecting}} + end. + +clean_stale_conn(Data, Gun) -> + #{active_conns := Actives, name := Name} = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, _, _}, NewActives} -> + ets:delete(?ETCD_CONNS, {Endpoint, Name}), + gun:close(Gun), + NewData = Data#{active_conns => NewActives}, + {next_state, ?reconnect, NewData, {next_event, internal, reconnecting}}; + false -> + {next_state, ?reconnect, Data, {next_event, internal, reconnecting}} + end. + +do_flush_token(Gun, OldToken, Data) -> + #{ + active_conns := Actives, + name := Name, + authenticate := Auth + } = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, Gun, OldToken}, NewActives} -> + case token_remote(Gun, Auth) of + {ok, NewToken} -> + Conn = #eetcd_conn{conn = self(), + gun = Gun, token = NewToken, + id = {Endpoint, Name}}, + ets:insert(?ETCD_CONNS, Conn), + NewData = Data#{active_conns => [{Endpoint, Gun, NewToken} | NewActives]}, + {NewToken, NewData}; + {error, _AuthReason} -> {OldToken, Data} + end; + {value, {_Endpoint, _Gun, NewToken}, _NewActives} -> + {NewToken, Data}; + _ -> {OldToken, Data} + end. + +reconnect_conns(#{mode := connect_all} = Data) -> + #{ + name := Name, + freeze_conns := Freezes, + active_conns := Actives, + gun_opts := GunOpts, + reconn_ref := ReConnRef + } = Data, + Auth = maps:get(authenticate, Data, undefined), + is_reference(ReConnRef) andalso erlang:cancel_timer(ReConnRef), + {NewActives, NewFreezes} = + lists:foldl(fun({Host, Ms}, {Ok, Failed}) -> + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, Token} -> + {[{Host, Gun, Token} | Ok], Failed}; + {error, _Reason} -> + {Ok, [{Host, reconnect_time(Ms bsl 1)} | Failed]} + end end, + {[], []}, Freezes), + NewData = Data#{active_conns => NewActives ++ Actives, freeze_conns => NewFreezes}, + case NewFreezes =:= [] of + true -> {next_state, ?ready, NewData, {next_event, internal, ?ready}}; + false -> + NextReconnMs = lists:min([T || {_, T} <- NewFreezes]), + NewRef = erlang:send_after(NextReconnMs, self(), reconnecting), + {next_state, ?reconnect, NewData#{reconn_ref => NewRef}} + end; +reconnect_conns(#{mode := random, active_conns := []} = Data) -> + #{endpoints := Hosts, index := Index, reconn_ref := ReConnRef} = Data, + is_reference(ReConnRef) andalso erlang:cancel_timer(ReConnRef), + Len = erlang:length(Hosts), + case connect_one(Index, Len, Data, Len) of + {ok, ?ready, NewData} -> + {next_state, ?ready, NewData, {next_event, internal, ?ready}}; + {stop, {shutdown, _Reason}} -> + NewRef = erlang:send_after(1000, self(), reconnecting), + {next_state, ?reconnect, Data#{reconn_ref => NewRef}} + end; +reconnect_conns(_Data) -> keep_state_and_data. + +next_check_health() -> + Ms = application:get_env(eetcd, health_check_ms, 15000), + erlang:send_after(Ms, self(), ?check_health). + +do_check_health(Data = #{mode := Mode, health_ref := HealthRef}) -> + erlang:cancel_timer(HealthRef), + NewData = do_check_health(Mode, Data), + NewHealthRef = next_check_health(), + NewData#{health_ref => NewHealthRef}. + +do_check_health(connect_all, Data) -> + #{ + name := Name, + active_conns := Actives, + freeze_conns := Freezes + } = Data, + {NewActives, NewFreezes} = + lists:foldl(fun({Host, Gun, _Token} = Endpoint, {Health, Freeze}) -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> + {[Endpoint | Health], Freeze}; + {error, Reason} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) leader failed by ~p ", [Name, Host, Reason]), + {Health, [{Host, ?MIN_RECONN} | Freeze]} + end; + {error, Reason1} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) health failed by ~p ", [Name, Host, Reason1]), + {Health, [{Host, ?MIN_RECONN} | Freeze]} + end + end, {[], Freezes}, Actives), + Data#{active_conns => NewActives, freeze_conns => NewFreezes}; +do_check_health(random, Data) -> + #{name := Name, active_conns := ActiveConns} = Data, + case ActiveConns of + [{Host, Gun, _Token}] -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> Data; + {error, Reason} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) leader failed by ~p ", [Name, Host, Reason]), + Data#{active_conns => []} + end; + {error, Reason1} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) health failed by ~p ", [Name, Host, Reason1]), + Data#{active_conns => []} + end; + [] -> Data + end. + +%% UNKNOWN = 0; +%% SERVING = 1; +%% NOT_SERVING = 2; +%% SERVICE_UNKNOWN = 3; // Used only by the Watch method. +check_health_remote(Gun) -> + Path = <<"/grpc.health.v1.Health/Check">>, + case eetcd_stream:unary(Gun, #{}, 'Etcd.HealthCheckRequest', Path, 'Etcd.HealthCheckResponse', ?HEADERS) of + {ok, #{status := 'SERVING'}} -> ok; + {ok, #{status := 'UNKNOWN'}} -> ok; + %% etcd does not support health checks in early versions of v3 API + {error, {grpc_error, #{'grpc-message' := <<"unknown service grpc.health.v1.Health">>, + 'grpc-status' := ?GRPC_STATUS_UNIMPLEMENTED}}} -> ok; + {ok, #{status := Status}} -> {error, {unhealthy, Status}}; + {error, _Reason} = Err -> Err + end. + +check_leader_remote(Gun) -> + Path = <<"/etcdserverpb.Maintenance/Status">>, + Request = eetcd:with_timeout(#{}, 10000), + case eetcd_stream:unary(Gun, Request, 'Etcd.StatusRequest', Path, 'Etcd.StatusResponse', ?HEADERS) of + {ok, #{leader := Leader}} when Leader > 0 -> ok; + {ok, #{errors := Errors, leader := 0}} -> {error, {no_leader, Errors}}; + {error, _Reason} = Err -> Err + end. + +token_remote(_Gun, undefined) -> {ok, undefined}; +token_remote(Gun, #{name := Name, password := Passwd}) -> + Path = <<"/etcdserverpb.Auth/Authenticate">>, + Req1 = eetcd:with_timeout(#{}, 10000), + Req2 = maps:put(name, Name, Req1), + Req3 = + case Passwd of + undefined -> Req2; + _ -> maps:put(password, Passwd, Req2) + end, + case eetcd_stream:unary(Gun, Req3, 'Etcd.AuthenticateRequest', Path, 'Etcd.AuthenticateResponse', ?HEADERS) of + {ok, #{token := Token}} -> {ok, Token}; + {error, _Reason} = Err -> Err + end. + +reconnect_time(Ms) when Ms > ?MAX_RECONN -> ?MIN_RECONN; +reconnect_time(Ms) -> Ms. + +put_in_authenticate(Data, Options) -> + case proplists:get_value(name, Options, undefined) of + undefined -> Data; + UserName -> + Password = proplists:get_value(password, Options), + Auth = #{name => UserName, password => Password}, + Data#{authenticate => Auth} + end. + +shuffle(List) -> + Disorders = [begin {rand:uniform(), K} end||K <-List], + [begin K end||{_, K} <- lists:keysort(1, Disorders)]. + diff --git a/deps/eetcd/src/eetcd_conn_sup.erl b/deps/eetcd/src/eetcd_conn_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..523e783996a8cb9dd10cceda3018d2d4c26bdf4d --- /dev/null +++ b/deps/eetcd/src/eetcd_conn_sup.erl @@ -0,0 +1,44 @@ +%% @private +-module(eetcd_conn_sup). + +-behaviour(supervisor). +-include("eetcd.hrl"). + +%% API +-export([start_link/0, start_child/1, info/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Args) -> + supervisor:start_child(?MODULE, Args). + +info() -> + lists:foldl(fun({_, Pid, _, _}, Acc) -> + {_StateName, + #{ + name := Name, + active_conns := Actives + } = Data} = sys:get_state(Pid), + Freezes = maps:get(freeze_conns, Data, []), + [{Name, #{etcd => Pid, active_conns => Actives, freeze_conns => Freezes}} | Acc] + end, [], supervisor:which_children(?MODULE)). + +init([]) -> + ets:new(?ETCD_CONNS, [named_table, {read_concurrency, true}, public, {keypos, #eetcd_conn.id}]), + MaxRestarts = 300, + MaxSecondsBetweenRestarts = 60, + SupFlags = #{ + strategy => simple_one_for_one, + intensity => MaxRestarts, + period => MaxSecondsBetweenRestarts}, + Worker = eetcd_conn, + Child = #{ + id => Worker, + start => {Worker, open, []}, + restart => transient, + shutdown => 1000, + type => worker, + modules => [Worker]}, + {ok, {SupFlags, [Child]}}. diff --git a/deps/eetcd/src/eetcd_data_coercion.erl b/deps/eetcd/src/eetcd_data_coercion.erl new file mode 100644 index 0000000000000000000000000000000000000000..71132bfdf6504dc9a8ea6254dc6641929022fa21 --- /dev/null +++ b/deps/eetcd/src/eetcd_data_coercion.erl @@ -0,0 +1,17 @@ +-module(eetcd_data_coercion). + +%% API +-export([to_list/1, to_binary/1]). + +-spec to_list(Val :: integer() | list() | binary() | atom() | map()) -> list(). +to_list(Val) when is_list(Val) -> Val; +to_list(Val) when is_map(Val) -> maps:to_list(Val); +to_list(Val) when is_atom(Val) -> atom_to_list(Val); +to_list(Val) when is_binary(Val) -> binary_to_list(Val); +to_list(Val) when is_integer(Val) -> integer_to_list(Val). + +-spec to_binary(Val :: binary() | list() | atom() | integer()) -> binary(). +to_binary(Val) when is_list(Val) -> list_to_binary(Val); +to_binary(Val) when is_atom(Val) -> atom_to_binary(Val, utf8); +to_binary(Val) when is_integer(Val) -> integer_to_binary(Val); +to_binary(Val) -> Val. diff --git a/deps/eetcd/src/eetcd_election.erl b/deps/eetcd/src/eetcd_election.erl new file mode 100644 index 0000000000000000000000000000000000000000..9637a93cd1750f51a6a617ffaf2daeb8216b8849 --- /dev/null +++ b/deps/eetcd/src/eetcd_election.erl @@ -0,0 +1,308 @@ +-module(eetcd_election). +-include("eetcd.hrl"). + +-export([new/1, with_timeout/2, with_name/2, with_lease/2, with_leader/2]). +-export([campaign/4, proclaim/3, leader/2, resign/2]). +-export([campaign/1, proclaim/1, leader/1, resign/1]). +-export([campaign_request/4, campaign_response/2]). +-export([observe/3, observe_stream/2]). + +-export_type([campaign_ctx/0, observe_ctx/0]). +-type observe_ctx() :: #{leader => map(), http2_pid => pid(), monitor_ref => reference(), stream_ref => reference()}. +-type campaign_ctx() :: #{campaign => map()|'waiting_campaign_response', http2_pid => pid(), monitor_ref => reference(), stream_ref => reference()}. + +%%% @doc Creates a blank context for a request. +-spec new(atom()|reference()) -> context(). +new(Ctx) -> eetcd:new(Ctx). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Ctx, Timeout) -> eetcd:with_timeout(Ctx, Timeout). + +%%% @doc name is the election's identifier for the campaign. +-spec with_name(context(), Name :: binary()) -> context(). +with_name(Ctx, Name) -> + maps:put(name, Name, Ctx). + +%%% @doc lease is the ID of the lease attached to leadership of the election. If the +%% lease expires or is revoked before resigning leadership, then the +%% leadership is transferred to the next campaigner, if any. +-spec with_lease(context(), LeaseID :: pos_integer()) -> context(). +with_lease(Ctx, LeaseID) -> + maps:put(lease, LeaseID, Ctx). + +%%% @doc value is the value set when the campaigner wins the election. +-spec with_value(context(), Value :: binary()) -> context(). +with_value(Ctx, Value) -> + maps:put(value, Value, Ctx). + +%%% @doc leader describes the resources used for holding leadership of the election. +%%% It's a map return from CampaignResponse +%%% name is the election identifier that corresponds to the leadership key. +%%% key is an opaque key representing the ownership of the election. If the key is deleted, then leadership is lost. +%%% rev is the creation revision of the key. It can be used to test for ownership of an election during transactions by testing the key's creation revision matches rev. +%%% lease is the lease ID of the election leader. +-spec with_leader(context(), Leader :: binary()) -> context(). +with_leader(Ctx, Leader) -> + maps:put(leader, Leader, Ctx). + +%%% @doc +%%% Campaign waits to acquire leadership in an election, returning a LeaderKey +%%% representing the leadership if successful. The LeaderKey can then be used +%%% to issue new values on the election, transactionally guard API requests on +%%% leadership still being held, and resign from the election. +%%%
+%%%
1. base
+%%%
`eetcd_election:campaign(ConnName, Name, LeaseId, Value).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_timeout(3000) +%%% |> :eetcd_election.with_name(name) +%%% |> :eetcd_election.with_lease(leaseId) +%%% |> :eetcd_election.with_value(Value) +%%% |> :eetcd_kv.campaign() +%%% ''' +%%%
+%%% {@link eetcd_election:with_name/2}, {@link eetcd_election:with_lease/2}, +%%% {@link eetcd_election:with_value/2}, {@link eetcd_election:with_timeout/2} +%%% @end +-spec campaign(Ctx :: context()) -> {ok, router_pb:'Etcd.CampaignResponse'()} | {error, eetcd_error()}. +campaign(Ctx) -> + eetcd_election_gen:campaign(Ctx). + +-spec campaign(Ctx :: context()|name(), Name :: binary(), LeaseId :: integer(), Value :: binary()) -> + {ok, router_pb:'Etcd.CampaignResponse'()} | {error, eetcd_error()}. +campaign(Ctx, Name, LeaseId, Value) -> + Ctx1 = new(Ctx), + Ctx2 = with_name(Ctx1, Name), + Ctx3 = with_lease(Ctx2, LeaseId), + Ctx4 = with_value(Ctx3, Value), + eetcd_election_gen:campaign(Ctx4). + +%%% @doc campaign async to acquire leadership. +%%% if there is already a leader, campaign/4 will be held(block) forever until timeout. +%%% the campaign_request/4 will return immediately, +%%% then your can use campaign_response/2 to handle `Etcd.CampaignResponse`. +%%% gen_server example +%%% ``` +%%% init(Arg) -> +%%% ... +%%% {ok, CCtx} = eetcd_election:campaign_request(connName, Name, LeaderId, Value), +%%% ... +%%% handle_info(Msg, State=#{ctx := CCtx}) -> +%%% case eetcd_election:campaign_response(CCtx, Msg) of +%%% unknown -> do_handle_your_msg(Msg, State); +%%% {ok, #{campaign := Leader}} -> campaign_win(Leader); +%%% {error, Reason} -> campaign_error(Reason) +%%% end. +%%% ''' +-spec campaign_request(name(), Name :: binary(), LeaseId :: integer(), Value :: binary()) -> + {ok, campaign_ctx()} | {error, eetcd_error()}. +campaign_request(ConnName, Name, LeaseId, Value) -> + Request0 = with_name(#{}, Name), + Request1 = with_lease(Request0, LeaseId), + Request = with_value(Request1, Value), + case eetcd_stream:new(ConnName, <<"/v3electionpb.Election/Campaign">>) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.CampaignRequest', fin), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + campaign => waiting_campaign_response + } + }; + Err -> Err + end. + +-spec campaign_response(campaign_ctx(), term()) -> + unknown|{ok, campaign_ctx()} | {error, eetcd_error()}. +%%% @doc handle campaign async response `Etcd.CampaignResponse'. +campaign_response(CCtx, Msg) -> + case resp_stream(CCtx, Msg) of + {ok, Bin} -> + #{monitor_ref := MRef} = CCtx, + erlang:demonitor(MRef, [flush]), + {ok, #{leader := Leader}, <<>>} + = eetcd_grpc:decode(identity, Bin, 'Etcd.CampaignResponse'), + {ok, #{ + campaign => Leader, + http2_pid => undefined, + monitor_ref => undefined, + stream_ref => undefined + }}; + Other -> Other + end. + +%%% @doc +%%% Proclaim updates the leader's posted value with a new value. +%%% Leader is the leadership hold on the election. +%%% Value is an update meant to overwrite the leader's current value. +%%%
+%%%
1. base
+%%%
`eetcd_election:proclaim(ConnName, Leader, Value).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_leader(name) +%%% |> :eetcd_election.with_value(Value) +%%% |> :eetcd_kv.proclaim() +%%% ''' +%%%
+%%% {@link eetcd_election:with_leader/2}, {@link eetcd_election:with_value/2} +%%% @end +-spec proclaim(Ctx :: context()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()} | {error, eetcd_error()}. +proclaim(Ctx) -> + eetcd_election_gen:proclaim(Ctx). + +-spec proclaim(Ctx :: context()|name(), Leader :: map(), Value :: binary()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()} | {error, eetcd_error()}. +proclaim(Ctx, Leader, Val) -> + Ctx1 = new(Ctx), + Ctx2 = with_leader(Ctx1, Leader), + Ctx3 = with_value(Ctx2, Val), + eetcd_election_gen:proclaim(Ctx3). + +%%% @doc +%%% Resign releases election leadership so other campaigners may acquire +%% leadership on the election. +%%%
+%%%
1. base
+%%%
`eetcd_election:resign(ConnName, Leader).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_leader(Leader) +%%% |> :eetcd_kv.resign() +%%% ''' +%%%
+%%% {@link eetcd_election:with_leader/2} +%%% @end +-spec resign(Ctx :: context()) -> + {ok, router_pb:'Etcd.ResignResponse'()} | {error, eetcd_error()}. +resign(Ctx) -> + eetcd_election_gen:resign(Ctx). + +-spec resign(Ctx :: context()|name(), Leader :: binary()) -> + {ok, router_pb:'Etcd.ResignResponse'()} | {error, eetcd_error()}. +resign(Ctx, Leader) -> + Ctx1 = new(Ctx), + Ctx2 = with_leader(Ctx1, Leader), + eetcd_election_gen:resign(Ctx2). + +%%% @doc +%%% Leader returns the current election proclamation, if any. +%%%
+%%%
1. base
+%%%
`eetcd_election:leader(ConnName, Name).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_name(name) +%%% |> :eetcd_kv.leader() +%%% ''' +%%%
+%%% {@link eetcd_election:with_name/2} +%%% @end +-spec leader(Ctx :: context()) -> + {ok, router_pb:'Etcd.LeaderResponse'()} | {error, eetcd_error()}. +leader(Ctx) -> + eetcd_election_gen:leader(Ctx). + +-spec leader(Ctx :: context()|name(), Name :: binary()) -> + {ok, router_pb:'Etcd.LeaderResponse'()} | {error, eetcd_error()}. +leader(Ctx, Name) -> + Ctx1 = new(Ctx), + Ctx2 = with_name(Ctx1, Name), + eetcd_election_gen:leader(Ctx2). + +%%% @doc Observe streams election proclamations in-order as made by the election's elected leaders. +%%% Timeout is an integer greater than zero which specifies how many milliseconds to wait for a leaders, +%%% or the atom infinity to wait indefinitely. If no leader is received within the specified time, +%%% the function call return 'election_no_leader'. and will streams election proclamations by order messages. +-spec observe(name(), binary(), timeout()) -> {ok, observe_ctx()}|{error, eetcd_error()}. +observe(ConnName, Name, Timeout) -> + Request = #{name => Name}, + {ok, Gun, StreamRef} = eetcd_election_gen:observe(ConnName), + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.LeaderRequest', fin), + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Body} -> + {ok, #{kv := KV}, <<>>} + = eetcd_grpc:decode(identity, Body, 'Etcd.LeaderResponse'), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + leader => KV + } + }; + {error, _} = Err1 -> + erlang:demonitor(MRef, [flush]), + Err1 + end; + {response, fin, 200, RespHeaders} -> + erlang:demonitor(MRef, [flush]), + {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, timeout} -> + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + leader => 'election_no_leader' + } + }; + {error, _} = Err2 -> + erlang:demonitor(MRef, [flush]), + Err2 + end. + +%%% @doc handle observe stream `Etcd.LeaderResponse'. +-spec observe_stream(observe_ctx(), term()) -> + unknown|{ok, observe_ctx()} | {error, eetcd_error()}. +observe_stream(OCtx, Msg) -> + case resp_stream(OCtx, Msg) of + {ok, Bin} -> + {ok, #{kv := KV}, <<>>} = eetcd_grpc:decode(identity, Bin, 'Etcd.LeaderResponse'), + {ok, OCtx#{leader => KV}}; + Other -> Other + end. + +resp_stream(#{stream_ref := Ref, http2_pid := Pid}, + {gun_response, Pid, Ref, nofin, 200, _Headers}) -> + receive {gun_data, Pid, Ref, nofin, Bin} -> + {ok, Bin} + after 2000 -> unknown + end; +resp_stream(#{stream_ref := Ref, http2_pid := Pid}, + {gun_data, Pid, Ref, nofin, Bin}) -> + {ok, Bin}; +resp_stream(#{stream_ref := SRef, http2_pid := Pid, monitor_ref := MRef}, + {gun_error, Pid, SRef, Reason}) -> %% stream error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {stream_error, Reason}}; +resp_stream(#{http2_pid := Pid, stream_ref := SRef, monitor_ref := MRef}, + {gun_error, Pid, Reason}) -> %% gun connection process state error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {conn_error, Reason}}; +resp_stream(#{http2_pid := Pid, monitor_ref := MRef}, + {'DOWN', MRef, process, Pid, Reason}) -> %% gun connection down + erlang:demonitor(MRef, [flush]), + {error, {http2_down, Reason}}; +resp_stream(_OCtx, _UnKnow) -> unknown. diff --git a/deps/eetcd/src/eetcd_grpc.erl b/deps/eetcd/src/eetcd_grpc.erl new file mode 100644 index 0000000000000000000000000000000000000000..5801dd62ec671ba4f68dd89b966490097be1aaff --- /dev/null +++ b/deps/eetcd/src/eetcd_grpc.erl @@ -0,0 +1,58 @@ +%% @private +-module(eetcd_grpc). +-include("eetcd.hrl"). + +-export([decode/3, encode/3]). +-export([grpc_status/1]). + +%%==================================================================== +%% API functions +%%==================================================================== + +-spec encode(identity | gzip, map(), atom()) -> binary(). +encode(GrpcType, Msg, MsgName) -> + PbMsg = router_pb:encode_msg(Msg, MsgName, [{verify, true}]), + encode_(GrpcType, PbMsg). + +-spec decode(identity | gzip, binary(), atom()) -> grpc_status(). +decode(Encoding, Frame, PbType) -> + case decode_(Frame, Encoding) of + {ok, PbBin, Fragment} -> + {ok, router_pb:decode_msg(PbBin, PbType), Fragment}; + more -> more + end. + + +grpc_status(RespHeaders) -> + GrpcStatus = binary_to_integer(proplists:get_value(<<"grpc-status">>, RespHeaders, <<"0">>)), + GrpcMessage = proplists:get_value(<<"grpc-message">>, RespHeaders, <<"">>), + #{'grpc-status' => GrpcStatus, 'grpc-message' => GrpcMessage}. + +%%==================================================================== +%% Internal functions +%%==================================================================== + +encode_(identity, Bin) -> + Length = byte_size(Bin), + <<0, Length:32, Bin/binary>>; +encode_(gzip, Bin) -> + CompressedBin = zlib:gzip(Bin), + Length = byte_size(CompressedBin), + <<1, Length:32, CompressedBin/binary>>; +encode_(Encoding, _) -> + throw({error, {unknown_encoding, Encoding}}). + +decode_(<<0, Length:32, Encoded:Length/binary, Rest/binary>>, _Encoding) -> {ok, Encoded, Rest}; +decode_(<<0, _Length:32, _Binary/binary>>, _Encoding) -> more; +decode_(<<1, Length:32, Compressed:Length/binary>>, gzip) -> + try + zlib:gunzip(Compressed) + catch + error:data_error -> + throw(?GRPC_ERROR(?GRPC_STATUS_INTERNAL, + <<"Could not decompress but compression algorithm gzip is supported">>)) + end; +decode_(<<_, Length:32, _Compressed:Length/binary, _Rest/binary>>, Encoding) -> + throw(?GRPC_ERROR(?GRPC_STATUS_UNIMPLEMENTED, + <<"Compression mechanism ", (atom_to_binary(Encoding, utf8))/binary, + " used for received frame not supported">>)). diff --git a/deps/eetcd/src/eetcd_kv.erl b/deps/eetcd/src/eetcd_kv.erl new file mode 100644 index 0000000000000000000000000000000000000000..a78248322fd2ae9e95b57a4d9f494de13e220e4b --- /dev/null +++ b/deps/eetcd/src/eetcd_kv.erl @@ -0,0 +1,368 @@ +-module(eetcd_kv). +-include("eetcd.hrl"). + +-export([put/1, put/3]). +-export([get/1, get/2]). +-export([delete/1, delete/2]). +-export([compact/1, compact/2]). +-export([txn/4]). + +-export([ + new/1, new/0, with_timeout/2, + with_key/2, with_value/2, with_prefix/1, + with_lease/2, with_ignore_value/1, with_ignore_lease/1, + with_from_key/1, with_range_end/2, with_limit/2, + with_rev/2, with_sort/3, with_serializable/1, + with_keys_only/1, with_count_only/1, + with_min_mod_rev/2, with_max_mod_rev/2, with_min_create_rev/2, + with_max_create_rev/2, with_first_create/1, with_last_create/1, + with_first_rev/1, with_last_rev/1, with_first_key/1, with_last_key/1, + with_top/3, with_prev_kv/1, with_physical/1 +]). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). +-spec new() -> context(). +new() -> #{}. + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%%% @doc Sets data for the request's `key'. +-spec with_key(context(), key()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%% @doc Sets data for the request's `value'. +-spec with_value(context(), key()) -> context(). +with_value(Context, Key) -> + maps:put(value, Key, Context). + +%% @doc Enables `get', `delete' requests to operate +%% on the keys with matching prefix. For example, `get(with_prefix(with_key(Ctx, "foo"))' +%% can return 'foo1', 'foo2', and so on. +-spec with_prefix(context()) -> context(). +with_prefix(#{key := Key} = Context) -> + with_range_end(Context, eetcd:get_prefix_range_end(Key)). + +%% @doc Specifies the range of `get', `delete' requests +%% to be equal or greater than the key in the argument. +-spec with_from_key(context()) -> context(). +with_from_key(Context) -> + with_range_end(Context, "\x00"). + +%% @doc Sets data for the request's `range_end'. +-spec with_range_end(context(), iodata()) -> context(). +with_range_end(Context, End) -> + maps:put(range_end, End, Context). + +%% @doc Limit the number of results to return from `get' request. +%% If with_limit is given a 0 limit, it is treated as no limit. +-spec with_limit(context(), iodata()) -> context(). +with_limit(Context, End) -> + maps:put(limit, End, Context). + +%% @doc Specifies the store revision for `get' request. +-spec with_rev(context(), pos_integer()) -> context(). +with_rev(Context, Rev) -> + maps:put(revision, Rev, Context). + +%% @doc Specifies the ordering in `get' request. It requires +%% `with_range' and/or `with_prefix' to be specified too. +%% `target' specifies the target to sort by: 'KEY', 'VERSION', 'VALUE', 'CREATE', 'MOD'. +%% `order' can be either 'NONE', 'ASCEND', 'DESCEND'. +-spec with_sort(context(), + 'KEY' | 'VERSION' | 'VALUE' | 'CREATE' |'MOD', + 'NONE' | 'ASCEND' | 'DESCEND') -> context(). +with_sort(Context, Target, Order) -> + Targets = router_pb:find_enum_def('Etcd.RangeRequest.SortTarget'), + Orders = router_pb:find_enum_def('Etcd.RangeRequest.SortOrder'), + (not lists:keymember(Target, 1, Targets)) andalso throw({sort_target, Target}), + (not lists:keymember(Order, 1, Orders)) andalso throw({sort_order, Order}), + R1 = maps:put(sort_order, Order, Context), + maps:put(sort_target, Target, R1). + +%% @doc Make `get' request serializable. By default, +%% it's linearizable. Serializable requests are better for lower latency +%% requirement. +-spec with_serializable(context()) -> context(). +with_serializable(Context) -> + maps:put(serializable, true, Context). + +%% @doc Make the `get' request return only the keys and the corresponding +%% values will be omitted. +-spec with_keys_only(context()) -> context(). +with_keys_only(Context) -> + maps:put(keys_only, true, Context). + +%% @doc Make the `get' request return only the count of keys. +-spec with_count_only(context()) -> context(). +with_count_only(Context) -> + maps:put(count_only, true, Context). + +%% @doc Filter out keys for `get' with modification revisions less than the given revision. +-spec with_min_mod_rev(context(), pos_integer()) -> context(). +with_min_mod_rev(Context, Rev) -> + maps:put(min_mod_revision, Rev, Context). + +%% @doc Filter out keys for `get' with modification revisions greater than the given revision. +-spec with_max_mod_rev(context(), pos_integer()) -> context(). +with_max_mod_rev(Context, Rev) -> + maps:put(max_mod_revision, Rev, Context). + +%% @doc Filter out keys for `get' with creation revisions less than the given revision. +-spec with_min_create_rev(context(), pos_integer()) -> context(). +with_min_create_rev(Context, Rev) -> + maps:put(min_create_revision, Rev, Context). + +%% @doc Filter out keys for `get' with creation revisions greater than the given revision. +-spec with_max_create_rev(context(), pos_integer()) -> context(). +with_max_create_rev(Context, Rev) -> + maps:put(max_create_revision, Rev, Context). + +%% @doc Get the key with the oldest creation revision in the request range. +-spec with_first_create(context()) -> context(). +with_first_create(Context) -> + with_top(Context, 'CREATE', 'ASCEND'). + +%% @doc Get the lexically last key in the request range. +-spec with_last_create(context()) -> context(). +with_last_create(Context) -> + with_top(Context, 'CREATE', 'DESCEND'). + +%% @doc Get the key with the oldest modification revision in the request range. +-spec with_first_rev(context()) -> context(). +with_first_rev(Context) -> + with_top(Context, 'MOD', 'ASCEND'). + +%% @doc Get the key with the latest modification revision in the request range. +-spec with_last_rev(context()) -> context(). +with_last_rev(Context) -> + with_top(Context, 'MOD', 'DESCEND'). + +%% @doc Get the lexically first key in the request range. +-spec with_first_key(context()) -> context(). +with_first_key(Context) -> + with_top(Context, 'KEY', 'ASCEND'). + +%% @doc Get the lexically last key in the request range. +-spec with_last_key(context()) -> context(). +with_last_key(Context) -> + with_top(Context, 'KEY', 'DESCEND'). + +%% @doc Get the first key over the get's prefix given a sort order +-spec with_top(context(), + 'KEY' | 'VERSION' | 'VALUE' | 'CREATE' |'MOD', + 'NONE' | 'ASCEND' | 'DESCEND') -> context(). +with_top(Context, SortTarget, SortOrder) -> + C1 = with_prefix(with_sort(Context, SortTarget, SortOrder)), + with_limit(C1, 1). + +%% @doc Get the previous key-value pair before the event happens. +%% If the previous KV is already compacted, nothing will be returned. +-spec with_prev_kv(context()) -> context(). +with_prev_kv(Context) -> + maps:put(prev_kv, true, Context). + +%% @doc Attache a lease ID to a key in `put' request. +-spec with_lease(context(), integer()) -> context(). +with_lease(Context, Id) when is_integer(Id) -> + maps:put(lease, Id, Context). + +%% @doc Update the key using its current value. +%% This option can not be combined with non-empty values. +%% Returns an error if the key does not exist. +-spec with_ignore_value(context()) -> context(). +with_ignore_value(Context) -> + maps:put(ignore_value, true, Context). + +%% @doc Update the key using its current lease. +%% This option can not be combined with `with_lease/2'. +%% Returns an error if the key does not exist. +-spec with_ignore_lease(context()) -> context(). +with_ignore_lease(Context) -> + maps:put(ignore_lease, true, Context). + +%% @doc WithPhysical makes Compact wait until all compacted entries are +%% removed from the etcd server's storage. +-spec with_physical(context()) -> context(). +with_physical(Context) -> + maps:put(physical, true, Context). + +%%% @doc Put puts a key-value pair into etcd. +%%%
+%%%
1. base
+%%%
`eetcd_kv:put(ConnName, Key, Value).'
+%%%
2. with lease id
+%%%
`eetcd_kv:put(Key, Value, eetcd_kv:with_lease(eetcd_kv:new(ConnName), LeaseID)).'
+%%%
3. elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(connName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_value(value) +%%% |> :eetcd_kv.with_lease(leaseId) +%%% |> :eetcd_kv.with_ignore_value() +%%% |> :eetcd_kv.with_timeout(6000) +%%% |> :eetcd_kv.put() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_key/2}, {@link eetcd_kv:with_value/2}, {@link eetcd_kv:with_lease/2}, +%%% {@link eetcd_kv:with_ignore_value/2}, {@link eetcd_kv:with_ignore_lease/2}, {@link eetcd_kv:with_timeout/2} +%%% @end +-spec put(context()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error, eetcd_error()}. +put(Context) -> eetcd_kv_gen:put(Context). + +%%% @doc Put puts a key-value pair into etcd with options {@link put/1} +-spec put(name()|context(), key(), value()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error, eetcd_error()}. +put(Context, Key, Value) -> + C1 = new(Context), + C2 = with_key(C1, Key), + C3 = with_value(C2, Value), + eetcd_kv_gen:put(C3). + +%%% @doc Get retrieves keys. +%%% By default, Get will return the value for Key, if any. +%%% When passed {@link eetcd_kv:with_range_end/2}, Get will return the keys in the range `[Key, End)'. +%%% When passed {@link eetcd_kv:with_from_key/1}, Get returns keys greater than or equal to key. +%%% When passed {@link eetcd_kv:with_revision/2} with Rev > 0, Get retrieves keys at the given revision; +%%% if the required revision is compacted, the request will fail with ErrCompacted. +%%% When passed {@link eetcd_kv:with_limit/1}, the number of returned keys is bounded by Limit. +%%% When passed {@link eetcd_kv:with_sort/3}, the keys will be sorted. +%%%
+%%%
1.base
+%%%
`eetcd_kv:get(ConnName,Key).'
+%%%
2.with range end
+%%%
`eetcd_kv:get(eetcd_kv:with_range_end(eetcd_kv:with_key(eetcd_kv:new(ConnName),Key),End)).'
+%%%
3.Elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(connName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_range_end(rangeEnd) +%%% |> :eetcd_kv.with_limit(limit) +%%% |> :eetcd_kv.with_revision(rev) +%%% |> :eetcd_kv.with_sort(:'KEY', :'ASCEND') %% 'NONE' | 'ASCEND' | 'DESCEND' enum Etcd.RangeRequest.SortOrder +%%% |> :eetcd_kv.with_serializable() +%%% |> :eetcd_kv.with_keys_only() +%%% |> :eetcd_kv.with_count_only() +%%% |> :eetcd_kv.with_min_mod_revision(minModRev) +%%% |> :eetcd_kv.with_max_mod_revision(maxModRev) +%%% |> :eetcd_kv.with_min_create_revision(minCreateRev) +%%% |> :eetcd_kv.with_max_create_revision(maxCreateRev) +%%% |> :eetcd_kv:get() +%%% ''' +%%%
+%%%
+%%% {@link eetcd_kv:with_key/2} {@link eetcd_kv:with_range_end/2} {@link eetcd_kv:with_limit/2} +%%% {@link eetcd_kv:with_revision/2} {@link eetcd_kv:with_sort/3} +%%% {@link eetcd_kv:with_serializable/1} {@link eetcd_kv:with_keys_only/1} +%%% {@link eetcd_kv:with_count_only/1} {@link eetcd_kv:with_min_mod_revision/2} +%%% {@link eetcd_kv:with_max_mod_revision/2} {@link eetcd_kv:with_min_create_revision/2} {@link eetcd_kv:with_max_create_revision/2} +%%% @end +-spec get(context()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error, eetcd_error()}. +get(Context) when is_map(Context) -> eetcd_kv_gen:range(Context). +%%% @doc Get retrieves keys with options. +-spec get(context()|name(), key()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error, eetcd_error()}. +get(Context, Key) -> + C0 = new(Context), + C1 = with_key(C0, Key), + eetcd_kv_gen:range(C1). + +%%% @doc Delete deletes a key, or optionally using eetcd_kv:with_range(End), [Key, End). +%%%
+%%%
1.base
+%%%
`eetcd_kv:delete(ConnName,Key).'
+%%%
2.with range end
+%%%
`eetcd_kv:delete(eetcd_kv:with_range_end(eetcd_kv:with_key(eetcd_kv:new(ConnName),Key), End)).'
+%%%
3.elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(ConnName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_range_end(rangeEnd) +%%% |> :eetcd_kv.with_prev_kv() +%%% |> :eetcd_kv.delete() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_key/2} {@link eetcd_kv:with_range_end/2} {@link eetcd_kv:with_prev_kv/1} +%%% @end +-spec delete(context()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error, eetcd_error()}. +delete(Context) when is_map(Context) -> eetcd_kv_gen:delete_range(Context). +%%% @doc Delete deletes a key with options +-spec delete(name()|context(), key()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error, eetcd_error()}. +delete(Context, Key) -> + C0 = new(Context), + C1 = with_key(C0, Key), + eetcd_kv_gen:delete_range(C1). + +%% @doc Compact compacts etcd KV history before the given revision. +%%%
+%%%
1.base
+%%%
`eetcd_kv:compact(ConnName,Revision).'
+%%%
2.with physical
+%%%
`eetcd_kv:compact(eetcd_kv:with_physical(eetcd_kv:with_revision(eetcd_kv:new(ConnName), Revision))).'
+%%%
3.Elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(ConnName) +%%% |> :eetcd_kv.with_revision(revision) +%%% |> :eetcd_kv.with_physical() +%%% |> :eetcd_kv.compact() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_revision/2} {@link eetcd_kv:with_physical/1} +%%% @end +-spec compact(context()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error, eetcd_error()}. +compact(Context) when is_map(Context) -> eetcd_kv_gen:compact(Context). +%% @doc Compact compacts etcd KV history before the given revision with options +-spec compact(name()|context(), integer()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error, eetcd_error()}. +compact(Context, Revision) -> + C0 = new(Context), + C1 = with_rev(C0, Revision), + eetcd_kv_gen:compact(C1). + +%%% @doc Txn creates a transaction. +%%
If takes a list of comparison. If all comparisons passed in succeed,
+%%
the operations passed into Then() will be executed.
+%%
Or the operations passed into Else() will be executed.
+%%
Then takes a list of operations. The Ops list will be executed, if the comparisons passed in If() succeed.
+%%
Else takes a list of operations. The Ops list will be executed, if the comparisons passed in If() fail.
+%%%
+%%%
+%%% ``` +%%% Cmp = eetcd_compare:new(Key), +%%% If = eetcd_compare:value(Cmp, ">", Value), +%%% Then = eetcd_op:put(eetcd_kv:with_value(eetcd_kv:with_key(eetcd_kv:new(), Key), NewValue)), +%%% Else = eetcd_op:delete(eetcd_kv:with_key(eetcd_kv:new(), Key)), +%%% eetcd_kv:txn(EtcdConnName, If, Then, Else). +%%% ''' +%%%
+%%% {@link eetcd_compare:new/1} {@link eetcd_compare:with_range/2} +%%% {@link eetcd_compare:value/3} {@link eetcd_compare:version/3} +%%% {@link eetcd_compare:mod_revision/3} {@link eetcd_compare:create_revision/3} +%%% {@link eetcd_compare:lease/3} +%%% {@link eetcd_op:put/1} {@link eetcd_op:get/1} +%%% {@link eetcd_op:delete/1} {@link eetcd_op:txn/1} +%%% @end +-spec txn(name()|context(), [router_pb:'Etcd.Compare'()], [router_pb:'Etcd.RequestOp'()], [router_pb:'Etcd.RequestOp'()]) -> + {ok, router_pb:'Etcd.TxnResponse'()}|{error, eetcd_error()}. +txn(Context, If, Then, Else) -> + C1 = new(Context), + Compare = case is_list(If) of true -> If; false -> [If] end, + Success = case is_list(Then) of true -> Then; false -> [Then] end, + Failure = case is_list(Else) of true -> Else; false -> [Else] end, + Txn = maps:merge(#{compare => Compare, success => Success, failure => Failure}, C1), + eetcd_kv_gen:txn(Txn). diff --git a/deps/eetcd/src/eetcd_lease.erl b/deps/eetcd/src/eetcd_lease.erl new file mode 100644 index 0000000000000000000000000000000000000000..4a993e489c2d5d655363c57c58899898d2a14ba8 --- /dev/null +++ b/deps/eetcd/src/eetcd_lease.erl @@ -0,0 +1,278 @@ +-module(eetcd_lease). +-include("eetcd.hrl"). +-behaviour(gen_server). + +-export([new/1, with_timeout/2]). +-export([grant/2, revoke/2, time_to_live/3, leases/1]). +-export([keep_alive/2, keep_alive_once/2]). +-export([close/0]). + +-export([start_link/3]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). + +-define(BLOCK, 3). +-define(LeaseNotFound, <<"etcdserver: requested lease not found">>). +-define(Event(ID, Reason), #{event => 'KeepAliveHalted', lease_id => ID, reason => Reason}). +-define(TRY_RECONNECTING, try_reconnecting). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%% @doc Grant creates a new lease with the provided TTL in seconds. +-spec grant(context(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +grant(Context, TTL) -> + C1 = new(Context), + C2 = maps:put('TTL', TTL, C1), + eetcd_lease_gen:lease_grant(C2). + +%% @doc Revoke revokes the given lease. +-spec revoke(context(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +revoke(Context, LeaseID) -> + C1 = new(Context), + C2 = maps:put('ID', LeaseID, C1), + eetcd_lease_gen:lease_revoke(C2). + +%% @doc TimeToLive retrieves the lease information of the given lease ID. +%% The 3rd argument is a option of `NeedAttachedKeys'. +-spec time_to_live(context(), pos_integer(), boolean()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +time_to_live(Context, LeaseID, WithKeys) when is_boolean(WithKeys) -> + C1 = new(Context), + C2 = maps:put('ID', LeaseID, C1), + C3 = maps:put(keys, WithKeys, C2), + case eetcd_lease_gen:lease_time_to_live(C3) of + {ok, #{'TTL' := TTL}} when TTL =< 0 -> + {error, #{'grpc-status' => ?GRPC_STATUS_NOT_FOUND, 'grpc-message' => ?LeaseNotFound}}; + {ok, _Reps} = Status -> Status; + {error, _Reason} = Err -> Err + end. + +%% @doc Leases retrieves all leases. +-spec leases(context()) -> + {ok, router_pb:'Etcd.LeaseLeasesResponse'()}|{error, eetcd_error()}. +leases(ConnName) -> + C1 = new(ConnName), + eetcd_lease_gen:lease_leases(C1). + +%% @doc KeepAlive attempts to keep the given lease alive forever. +%% +%% If client keep alive processes halts with an unexpected error (e.g. "etcdserver: no leader") or canceled by others, +%% KeepAlive process send a KeepAliveHalted event(`#{event => 'KeepAliveHalted', lease_id => ID, reason => Reason}') to caller. +%% +%% KeepAlive makes best efforts to keep lease TTL, event the connection disconnect in 0 to ttl seconds. +%% todo more detail +-spec keep_alive(name(), pos_integer()) -> {ok, pid()} |{error, term()}. +keep_alive(Name, LeaseID) -> + case eetcd_lease_sup:start_child(Name, LeaseID) of + {ok, Pid} -> {ok, Pid}; + {error, {shutdown, Reason}} -> {error, Reason} + end. + +%% @doc KeepAliveOnce renews the lease once. The response corresponds to the +%% first message from calling KeepAlive. If the response has a recoverable +%% error, KeepAliveOnce will not retry the RPC with a new keep alive message. +%% In most of the cases, Keepalive should be used instead of KeepAliveOnce. +-spec keep_alive_once(name(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseKeepAliveResponse'()}|{error, eetcd_error()}. +keep_alive_once(Name, LeaseID) when is_atom(Name) orelse is_reference(Name) -> + case eetcd_lease_gen:lease_keep_alive(Name) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + Res = keep_alive_once(Gun, StreamRef, LeaseID, MRef), + gun:cancel(Gun, StreamRef), + erlang:demonitor(MRef, [flush]), + Res; + Err -> Err + end. + +%% @doc Close releases all resources Lease keeps for efficient communication with the etcd server. +%% Return the count of all close processes. +%% If you want to revokes the given lease, please use `revoke/2'. +-spec close() -> pos_integer(). +close() -> + lists:foldl( + fun({_Id, Pid, _Type, _Modules}, Acc) -> + gen_server:cast(Pid, close), + Acc + 1 + end, 0, + supervisor:which_children(eetcd_lease_sup)). + +-spec start_link(pid(), name(), integer()) -> {ok, pid()}. +start_link(Caller, Name, LeaseID) -> + gen_server:start_link(?MODULE, [Caller, Name, LeaseID], []). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +init([Caller, Name, LeaseID]) -> + case first_keep_alive_once(Name, LeaseID) of + {ok, Gun, Ref, MRef, TTL} -> + After = erlang:max(round(TTL / ?BLOCK), 1) * 1000, + TimeRef = schedule_next_keep_alive(After), + {ok, #{name => Name, gun => Gun, caller => Caller, + ttl => TTL, lease_id => LeaseID, + stream_ref => Ref, monitor_ref => MRef, next_ref => TimeRef, + ongoing => 0, last_disconnect => 0} + }; + {error, Err} -> {stop, {shutdown, Err}} + end. + +handle_call(_Request, _From, State) -> + {reply, ignore, State, State}. + +handle_cast(close, State = #{lease_id := ID, caller := Caller}) -> + erlang:send(Caller, ?Event(ID, <<"stream closed manually">>)), + {stop, normal, State}; + +handle_cast(_Request, State) -> + {noreply, State, State}. + +handle_info(?TRY_RECONNECTING, State) -> + try_reconnecting(State); + +handle_info({'DOWN', Ref, process, Gun, Reason}, #{gun := Gun, monitor_ref := Ref} = State) -> + ?LOG_INFO("Lease KeepAlive: ~p find gun(~p) process stop ~p~n", [self(), Gun, Reason]), + reconnect(State); + +handle_info({gun_data, _Pid, Ref, nofin, Data}, + State = #{stream_ref := Ref, ongoing := Ongoing, caller := Caller}) -> + case eetcd_grpc:decode(identity, Data, 'Etcd.LeaseKeepAliveResponse') of + {ok, #{'ID' := ID, 'TTL' := TTL}, <<>>} when TTL =< 0 -> + Event = ?Event(ID, ?LeaseNotFound), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State}; + {ok, #{'TTL' := _TTL}, <<>>} -> {noreply, State#{ongoing => Ongoing - 1}} + end; + +%% [{<<"grpc-status">>,<<"14">>},{<<"grpc-message">>,<<"etcdserver: no leader">>}]} +handle_info({gun_trailers, Gun, StreamRef, Header}, + State = #{name := Name, stream_ref := StreamRef, gun := Gun}) -> + check_leader(Header, Name), + reconnect(State); +%% it will receive another stream_ref gun_response to this process, notifying no leader event. +%% [{<<"grpc-status">>,<<"14">>},{<<"grpc-message">>,<<"etcdserver: no leader">>}]} +handle_info({gun_response, Gun, _StreamRef, _Fin, 200, Header}, + State = #{name := Name, gun := Gun}) -> + check_leader(Header, Name), + reconnect(State); +handle_info({keep_ttl, Next}, State) -> + keep_ttl(Next, State); +handle_info({gun_error, Gun, _StreamRef, _Reason}, State = #{gun := Gun}) -> + reconnect(State); +handle_info({gun_error, Gun, _Reason}, State = #{gun := Gun}) -> + reconnect(State); + +handle_info(Info, State) -> + ?LOG_ERROR("Leaser({~p,~p}) receive unknow msg ~p~n state~p~n", + [?MODULE, self(), Info, State]), + {noreply, State}. + +terminate(_Reason, #{stream_ref := Ref, gun := Gun}) -> + gun:cancel(Gun, Ref), + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +first_keep_alive_once(Name, LeaseID) -> + case eetcd_lease_gen:lease_keep_alive(Name) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + case keep_alive_once(Gun, StreamRef, LeaseID, MRef) of + {ok, #{'TTL' := TTL}} -> {ok, Gun, StreamRef, MRef, TTL}; + Err -> Err + end; + {error, _Reason} = Err -> Err + end. + +keep_alive_once(Gun, StreamRef, LeaseID, MRef) -> + eetcd_stream:data(Gun, StreamRef, #{'ID' => LeaseID}, 'Etcd.LeaseKeepAliveRequest', nofin), + case eetcd_stream:await(Gun, StreamRef, 5000, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, 5000, MRef) of + {data, nofin, ResBody} -> + case eetcd_grpc:decode(identity, ResBody, 'Etcd.LeaseKeepAliveResponse') of + {ok, #{'TTL' := TTL}, <<>>} when TTL =< 0 -> + {error, #{'grpc-status' => ?GRPC_STATUS_NOT_FOUND, 'grpc-message' => ?LeaseNotFound}}; + {ok, Resp, <<>>} -> {ok, Resp} + end; + {error, _Reason} = Err1 -> Err1 + end; + {response, fin, 200, RespHeaders} -> {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, _Reason} = Err2 -> Err2 + end. + +keep_ttl(Next, State) -> + #{stream_ref := Ref, gun := Gun, + lease_id := ID, ongoing := Ongoing, + name := Name, caller := Caller} = State, + case Ongoing =< 2 * ?BLOCK of + true -> + eetcd_stream:data(Gun, Ref, #{'ID' => ID}, 'Etcd.LeaseKeepAliveRequest', nofin), + TimeRef = schedule_next_keep_alive(Next), + {noreply, State#{ongoing => Ongoing + 1, next_ref => TimeRef}}; + false -> + case time_to_live(Name, ID, false) of + {ok, _} -> reconnect(State); + {error, Reason} -> + Event = ?Event(ID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State} + end + end. + +schedule_next_keep_alive(After) -> + erlang:send_after(After, self(), {keep_ttl, After}). + +reconnect(State) -> + #{next_ref := NextRef, stream_ref := Ref, gun := Gun} = State, + erlang:cancel_timer(NextRef), + gun:cancel(Gun, Ref), + NewState = State#{ongoing => 0, last_disconnect => erlang:system_time(second)}, + try_reconnecting(NewState). + +try_reconnecting(State) -> + #{ + name := Name, lease_id := LeaseID, + last_disconnect := LastDisconnect, ttl := TTL, + caller := Caller + } = State, + case erlang:system_time(second) - LastDisconnect > TTL of + true -> + case time_to_live(Name, LeaseID, false) of + {ok, _} -> reconnect(State); + {error, Reason} -> + Event = ?Event(LeaseID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State} + end; + false -> + case init([Caller, Name, LeaseID]) of + {ok, NewState} -> {noreply, NewState}; + {stop, {shutdown, #{'grpc-status' := ?GRPC_STATUS_NOT_FOUND} = Reason}} -> + Event = ?Event(LeaseID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State}; + {stop, _Reason} -> + erlang:send_after(1000, self(), ?TRY_RECONNECTING), + {noreply, State} + end + end. +check_leader(Header, Name) -> + case eetcd_grpc:grpc_status(Header) of + #{'grpc-status' := 14} -> eetcd_conn:check_health(Name); + _ -> ok + end. diff --git a/deps/eetcd/src/eetcd_lease_sup.erl b/deps/eetcd/src/eetcd_lease_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..a4aa29d535d6d965c2e8cf6eaf34e441389d6d52 --- /dev/null +++ b/deps/eetcd/src/eetcd_lease_sup.erl @@ -0,0 +1,38 @@ +%% @private +-module(eetcd_lease_sup). + +-behaviour(supervisor). +-include("eetcd.hrl"). + +%% API +-export([start_link/0, start_child/2, info/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Name, LeaseID) -> + supervisor:start_child(?MODULE, [self(), Name, LeaseID]). + +info() -> + lists:foldl(fun({_, Pid, _, _}, Acc) -> + #{gun := Gun} = sys:get_state(Pid), + maps:update_with(Gun, fun(C) -> C + 1 end, 1, Acc) + end, #{}, supervisor:which_children(?MODULE)). + +init([]) -> + MaxRestarts = 300, + MaxSecondsBetweenRestarts = 10, + SupFlags = #{ + strategy => simple_one_for_one, + intensity => MaxRestarts, + period => MaxSecondsBetweenRestarts}, + Worker = eetcd_lease, + Child = #{ + id => Worker, + start => {Worker, start_link, []}, + restart => temporary, + shutdown => 1000, + type => worker, + modules => [Worker]}, + {ok, {SupFlags, [Child]}}. diff --git a/deps/eetcd/src/eetcd_lock.erl b/deps/eetcd/src/eetcd_lock.erl new file mode 100644 index 0000000000000000000000000000000000000000..4c8828bea5f211e3acc46f531c2b1fafbcff06f6 --- /dev/null +++ b/deps/eetcd/src/eetcd_lock.erl @@ -0,0 +1,60 @@ +-module(eetcd_lock). +-include("eetcd.hrl"). + +-export([new/1, with_timeout/2, with_name/2, with_lease/2, with_key/2]). +-export([lock/1, lock/3, unlock/2]). + + +%%% @doc Creates a blank context for a request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%%% @doc name is the identifier for the distributed shared lock to be acquired. +-spec with_name(context(), Name :: binary()) -> context(). +with_name(Context, Name) -> + maps:put(name, Name, Context). + +%%% @doc lease is the ID of the lease that will be attached to ownership of the +%%% lock. If the lease expires or is revoked and currently holds the lock, +%%% the lock is automatically released. Calls to Lock with the same lease will +%%% be treated as a single acquisition; locking twice with the same lease is a no-op. +-spec with_lease(context(), LeaseID :: pos_integer()) -> context(). +with_lease(Context, LeaseID) -> + maps:put(lease, LeaseID, Context). + +%%% @doc key is a key that will exist on etcd for the duration that the Lock caller +%% owns the lock. Users should not modify this key or the lock may exhibit undefined behavior. +-spec with_key(context(), Key :: binary()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%%% @doc Lock acquires a distributed shared lock on a given named lock. +%%% On success, it will return a unique key that exists so long as the +%%% lock is held by the caller. This key can be used in conjunction with +%%% transactions to safely ensure updates to etcd only occur while holding +%%% lock ownership. The lock is held until Unlock is called on the key or the +%%% lease associate with the owner expires. +-spec lock(Ctx :: context()) -> {ok, router_pb:'Etcd.LockResponse'()} | {error, eetcd_error()}. +lock(Context) -> + eetcd_lock_gen:lock(Context). + +-spec lock(Ctx :: context()|name(), Name :: binary(), LeaseID :: pos_integer()) -> {ok, router_pb:'Etcd.LockResponse'()} | {error, eetcd_error()}. +lock(Context0, Name, LeaseID) -> + Context1 = new(Context0), + Context = with_lease(with_name(Context1, Name), LeaseID), + eetcd_lock_gen:lock(Context). + +%%% @doc Unlock takes a key returned by Lock and releases the hold on lock. The +%%% next Lock caller waiting for the lock will then be woken up and given +%%% ownership of the lock. +-spec unlock(Ctx :: context()|name(), Key :: binary()) -> {ok, router_pb:'Etcd.UnlockRequest'()} | {error, eetcd_error()}. +unlock(Context0, Key) -> + Context1 = new(Context0), + Context = with_key(Context1, Key), + eetcd_lock_gen:unlock(Context). diff --git a/deps/eetcd/src/eetcd_maintenance.erl b/deps/eetcd/src/eetcd_maintenance.erl new file mode 100644 index 0000000000000000000000000000000000000000..3b5c5a91fbd819c7fef2eb2ec13a9b5fbeb6dbe8 --- /dev/null +++ b/deps/eetcd/src/eetcd_maintenance.erl @@ -0,0 +1,97 @@ +-module(eetcd_maintenance). +-include("eetcd.hrl"). +%% API +-export([alarm_list/1, alarm_disarm/3, alarm_disarm_all/1]). +-export([defragment/3, status/3, hash_kv/4, move_leader/2]). + +%%% @doc AlarmList gets all active alarms. +-spec alarm_list(context()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_list(ConnName) -> + C1 = eetcd:new(ConnName), + C2 = maps:put(action, 'GET', C1), + C3 = maps:put(memberID, 0, C2), + C4 = maps:put(alarm, 'NONE', C3), + eetcd_maintenance_gen:alarm(C4). + +%%% @doc AlarmDisarm disarms a given alarm. +-spec alarm_disarm(context(), integer(), integer()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_disarm(Context, MemberId, Alarm) -> + C1 = eetcd:new(Context), + C2 = maps:put(action, 'DEACTIVATE', C1), + C3 = maps:put(memberID, MemberId, C2), + C4 = maps:put(alarm, Alarm, C3), + eetcd_maintenance_gen:alarm(C4). + +%%% @doc AlarmDisarmAll disarms all alarm. +-spec alarm_disarm_all(context()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_disarm_all(ConnName) -> + {ok, Acc0 = #{alarms := List}} = alarm_list(ConnName), + lists:foldl(fun(#{memberID := Id, alarm := Alarm}, Acc) -> + #{alarm := Old} = Acc, + {ok, A = #{alarm := L}} = alarm_disarm(ConnName, Id, Alarm), + A#{alarm => L ++ Old} end, Acc0#{alarm => []}, List). + +%%% @doc Defragment releases wasted space from internal fragmentation on a given etcd member. +%%% Defragment is only needed when deleting a large number of keys and want to reclaim the resources. +%%% Defragment is an expensive operation. User should avoid defragmenting multiple members at the same time. +%%% To defragment multiple members in the cluster, user need to call defragment multiple +%%% times with different endpoints. +-spec defragment(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok,router_pb:'Etcd.DefragmentResponse'()}|{error,eetcd_error()}. +defragment(Endpoint, Transport, TransportOpts) -> + Fun = fun(Conn) -> eetcd_maintenance_gen:defragment(eetcd:new(Conn)) end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% @doc Status gets the status of the endpoint. +-spec status(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok,router_pb:'Etcd.StatusResponse'()}|{error,eetcd_error()}. +status(Endpoint, Transport, TransportOpts) -> + Fun = fun(Conn) -> eetcd_maintenance_gen:status(eetcd:new(Conn)) end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% @doc HashKV returns a hash of the KV state at the time of the RPC. +%%% If revision is zero, the hash is computed on all keys. If the revision +%%% is non-zero, the hash is computed on all keys at or below the given revision. +-spec hash_kv(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()], pos_integer()) -> + {ok,router_pb:'Etcd.HashKVResponse'()}|{error,eetcd_error()}. +hash_kv(Endpoint, Transport, TransportOpts, Rev) -> + Fun = fun(Conn) -> + Context = maps:put(revision, Rev, eetcd:new(Conn)), + eetcd_maintenance_gen:hash_kv(Context) + end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% Snapshot provides a reader for a point-in-time snapshot of etcd. +%%% If the context "ctx" is canceled or timed out, reading from returned +%%% "io.ReadCloser" would error out (e.g. context.Canceled, context.DeadlineExceeded). +%% snapshot(Context) (io.ReadCloser, error) +%% todo + +%%% @doc MoveLeader requests current leader to transfer its leadership to the transferee. +%%% Request must be made to the leader. +-spec move_leader(name()|context(), pos_integer()) -> + {ok,router_pb:'Etcd.MoveLeaderResponse'()}|{error,eetcd_error()}. +move_leader(Context, TargetID) -> + C1 = eetcd:new(Context), + C2 = maps:put(targetID, TargetID, C1), + eetcd_maintenance_gen:move_leader(C2). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +dial(Endpoint, Transport, TransportOpts, Fun) -> + Conn = make_ref(), + try + case eetcd:open(Conn, [Endpoint], Transport, TransportOpts) of + {ok, _Pid} -> Fun(Conn); + Err -> + Err + end + catch E:R -> + {error, E, R} + after + eetcd:close(Conn) + end. diff --git a/deps/eetcd/src/eetcd_op.erl b/deps/eetcd/src/eetcd_op.erl new file mode 100644 index 0000000000000000000000000000000000000000..21452e3db89065f2d4cd43ca656eb0824e5ea071 --- /dev/null +++ b/deps/eetcd/src/eetcd_op.erl @@ -0,0 +1,14 @@ +-module(eetcd_op). +-export([put/1, get/1, delete/1, txn/1]). + +put(PutRequest) -> + #{request => {request_put, PutRequest}}. + +get(RangeRequest) -> + #{request => {request_range, RangeRequest}}. + +delete(DeleteRangeRequest) -> + #{request => {request_delete_range, DeleteRangeRequest}}. + +txn(TxnRequest) -> + #{request => {request_txn, TxnRequest}}. diff --git a/deps/eetcd/src/eetcd_stream.erl b/deps/eetcd/src/eetcd_stream.erl new file mode 100644 index 0000000000000000000000000000000000000000..aa609912ec7e26b5963ea8ac8824c91d263de23a --- /dev/null +++ b/deps/eetcd/src/eetcd_stream.erl @@ -0,0 +1,152 @@ +%% @private +-module(eetcd_stream). + +%% API +-export([unary/4, unary/6]). +-export([new/2, new/4]). +-export([data/5]). +-export([await/4]). + +-include("eetcd.hrl"). + +-spec new(Name, Path) -> {ok, GunPid, Http2Ref} when + Name :: name(), + Path :: iodata(), + GunPid :: pid(), + Http2Ref :: reference(). +new(Name, Path) -> + case eetcd_conn:round_robin_select(Name) of + {ok, Pid, Headers} -> + Ref = gun:request(Pid, <<"POST">>, Path, Headers, <<>>), + {ok, Pid, Ref}; + Err -> Err + end. + +-spec new(Name, EtcdMsg, EtcdMsgName, Http2Path) -> Http2Ref when + Name :: name(), + EtcdMsg :: map(), + EtcdMsgName :: atom(), + Http2Path :: iodata(), + Http2Ref :: reference(). +new(Name, Msg, MsgName, Path) -> + case new(Name, Path) of + {ok, Pid, Ref} -> + data(Pid, Ref, Msg, MsgName, nofin), + {ok, Pid, Ref}; + Err -> Err + end. + +-spec data(GunPid, Http2Ref, EtcdMsg, EtcdMsgName, Http2Path) -> Http2Ref when + GunPid :: pid(), + Http2Ref :: reference(), + EtcdMsg :: map(), + EtcdMsgName :: atom(), + Http2Path :: iodata(). +data(Pid, Ref, Msg, MsgName, IsFin) -> + EncodeBody = eetcd_grpc:encode(identity, Msg, MsgName), + gun:data(Pid, Ref, IsFin, EncodeBody), + Ref. + +-spec unary(EtcdRequest, EtcdRequestName, Http2Path, EtcdResponseType) -> EtcdResponse when + EtcdRequest :: map(), + EtcdRequestName :: atom(), + Http2Path :: iodata(), + EtcdResponseType :: atom(), + EtcdResponse :: tuple() | eetcd_error(). +unary(Request, RequestName, Path, ResponseType) -> + case maps:find(eetcd_conn_name, Request) of + {ok, Name} -> + case eetcd_conn:round_robin_select(Name) of + {ok, Pid, Headers} -> + NewRequest = maps:remove(eetcd_conn_name, Request), + unary(Pid, NewRequest, RequestName, Path, ResponseType, Headers); + Err -> Err + end; + error -> {error, eetcd_conn_unavailable} + end. + +-spec unary(Pid, EtcdRequest, EtcdRequestName, Http2Path, EtcdResponseType, Http2Headers) -> EtcdResponse when + Pid :: pid(), + EtcdRequest :: map(), + EtcdRequestName :: atom(), + Http2Path :: iodata(), + EtcdResponseType :: atom(), + Http2Headers :: list(), + EtcdResponse :: tuple(). +unary(Pid, Request, RequestName, Path, ResponseType, Headers) when is_pid(Pid) -> + Timeout = maps:get(eetcd_reply_timeout, Request, 9000), + EncodeBody = eetcd_grpc:encode(identity, maps:remove(eetcd_reply_timeout, Request), RequestName), + MRef = erlang:monitor(process, Pid), + StreamRef = gun:request(Pid, <<"POST">>, Path, Headers, EncodeBody), + Res = + case await(Pid, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case await_body(Pid, StreamRef, Timeout, MRef, <<>>) of + {ok, ResBody, _Trailers} -> + {ok, Resp, <<>>} = eetcd_grpc:decode(identity, ResBody, ResponseType), + {ok, Resp}; + {error, _} = Error1 -> Error1 + end; + {response, fin, 200, RespHeaders} -> + case eetcd_grpc:grpc_status(RespHeaders) of + #{'grpc-status' := ?GRPC_STATUS_UNAUTHENTICATED, + 'grpc-message' := <<"etcdserver: invalid auth token">>} -> + NewHeaders = eetcd_conn:flush_token(Pid, Headers), + StreamRef1 = gun:request(Pid, <<"POST">>, Path, NewHeaders, EncodeBody), + case await(Pid, StreamRef1, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case await_body(Pid, StreamRef1, Timeout, MRef, <<>>) of + {ok, ResBody, _Trailers} -> + {ok, Resp, <<>>} = eetcd_grpc:decode(identity, ResBody, ResponseType), + {ok, Resp}; + {error, _} = Error1 -> Error1 + end; + {response, fin, 200, RespHeaders} -> + {error, {grpc_error, eetcd_grpc:grpc_status(RespHeaders)}} + end; + Error3 -> {error, {grpc_error, Error3}} + end; + {error, _} = Error2 -> Error2 + end, + erlang:demonitor(MRef, [flush]), + Res. + +%% `gun:await/2,3,4`, `gun:await_body/2,3,4` and `gun:await_up/1,2,3` don't distinguish the error types until v2.0.0. +%% They can be a timeout, a connection error, a stream error or a down error (when the Gun process exited while waiting). +%% so we copy some code from gun v2.0.0 to replace `gun:await/4` +%% TODO remove this when upgrade gun to v2.0.0 +await(ServerPid, StreamRef, Timeout, MRef) -> + receive + {gun_response, ServerPid, StreamRef, IsFin, Status, Headers} -> + {response, IsFin, Status, Headers}; + {gun_data, ServerPid, StreamRef, IsFin, Data} -> + {data, IsFin, Data}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, {gun_stream_error, Reason}}; + {gun_error, ServerPid, Reason} -> + {error, {gun_conn_error, Reason}}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, {gun_down, Reason}} + after Timeout -> + {error, timeout} + end. + +await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> + receive + {gun_data, ServerPid, StreamRef, nofin, Data} -> + await_body(ServerPid, StreamRef, Timeout, MRef, + <>); + {gun_data, ServerPid, StreamRef, fin, Data} -> + {ok, <>}; + %% It's OK to return trailers here because the client specifically requested them + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {ok, Acc, Trailers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, {gun_stream_error, Reason}}; + {gun_error, ServerPid, Reason} -> + {error, {gun_conn_error, Reason}}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, {gun_down, Reason}} + after Timeout -> + {error, timeout} + end. diff --git a/deps/eetcd/src/eetcd_sup.erl b/deps/eetcd/src/eetcd_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..06513a2848828b92fe6d8370dc181a1154d17abe --- /dev/null +++ b/deps/eetcd/src/eetcd_sup.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc eetcd top level supervisor. +%% @private +%% @end +%%%------------------------------------------------------------------- + +-module(eetcd_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%%==================================================================== +%% API functions +%%==================================================================== + +-spec start_link() -> {ok, pid()}. +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%%==================================================================== +%% Supervisor callbacks +%%==================================================================== + +init([]) -> + SupFlags = #{strategy => one_for_one, intensity => 1000, period => 10}, + Http2Sup = eetcd_conn_sup, + LeaserSup = eetcd_lease_sup, + ChildSpecs = [ + #{id => Http2Sup, + start => {Http2Sup, start_link, []}, + restart => permanent, + shutdown => 5000, + type => worker, + modules => [Http2Sup]}, + #{id => LeaserSup, + start => {LeaserSup, start_link, []}, + restart => permanent, + shutdown => 5000, + type => worker, + modules => [LeaserSup]} + ], + {ok, {SupFlags, ChildSpecs}}. diff --git a/deps/eetcd/src/eetcd_watch.erl b/deps/eetcd/src/eetcd_watch.erl new file mode 100644 index 0000000000000000000000000000000000000000..ed376163f7edf9383bc26cf0eb0a904e64daa84c --- /dev/null +++ b/deps/eetcd/src/eetcd_watch.erl @@ -0,0 +1,259 @@ +-module(eetcd_watch). +-include("eetcd.hrl"). + +-export_type([watch_conn/0]). +-type watch_conn() :: #{http2_pid => pid(), +monitor_ref => reference(), +stream_ref => reference(), +unprocessed => binary(), +revision => integer(), %% Revision is the revision of the KV when the watchResponse is created. For a normal response, the revision should be the same as the last modified revision inside Events. +compact_revision => integer(), %% CompactRevision is set when the watcher is cancelled due to compaction. +watch_id => integer(), +response => router_pb:'Etcd.WatchResponse'()}. + +%% API +-export([new/0, with_key/2, + with_range_end/2, with_prefix/1, with_from_key/1, + with_start_revision/2, + with_filter_delete/1, with_filter_put/1, + with_prev_kv/1, + with_watch_id/2, + with_fragment/1, + with_progress_notify/1 +]). +-export([watch/2, watch/3]). +-export([watch_stream/2]). +-export([unwatch/2]). +-export([rev/1]). + +%%% @doc init watch request +-spec new() -> context(). +new() -> #{}. + +%% @doc AutoWatchID is the watcher ID passed in WatchStream.Watch when no +%% user-provided ID is available, an ID will automatically be assigned. +with_watch_id(Context, WatchId) -> + maps:put(watch_id, WatchId, Context). + +%% @doc Get the previous key-value pair before the event happens. +%% If the previous KV is already compacted, nothing will be returned. +-spec with_prev_kv(context()) -> context(). +with_prev_kv(Context) -> + maps:put(prev_kv, true, Context). + +%% @doc WithFragment to receive raw watch response with fragmentation. +%%Fragmentation is disabled by default. If fragmentation is enabled, +%%etcd watch server will split watch response before sending to clients +%%when the total size of watch events exceed server-side request limit. +%%The default server-side request limit is 1.5 MiB, which can be configured +%%as "--max-request-bytes" flag value + gRPC-overhead 512 bytes. +-spec with_fragment(context()) -> context(). +with_fragment(Context) -> + maps:put(fragment, true, Context). + +with_start_revision(Context, Rev) -> + maps:put(start_revision, Rev, Context). + +%% @doc Make watch server send periodic progress updates +%% every 10 minutes when there is no incoming events. +%% Progress updates have zero events in WatchResponse. +-spec with_progress_notify(context()) -> context(). +with_progress_notify(Context) -> + maps:put(progress_notify, true, Context). + +%% @doc discards PUT events from the watcher. +-spec with_filter_put(context()) -> context(). +with_filter_put(Context) -> + maps:update_with(filters, + fun(V) -> lists:usort(['NOPUT' | V]) end, + ['NOPUT'], + Context). + +%% @doc discards DELETE events from the watcher. +-spec with_filter_delete(context()) -> context(). +with_filter_delete(Context) -> + maps:update_with(filters, + fun(V) -> lists:usort(['NODELETE' | V]) end, + ['NODELETE'], + Context). + +%%% @doc Sets the byte slice for the Op's `key'. +-spec with_key(context(), key()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%% @doc Enables `watch' requests to operate +%% on the keys with matching prefix. For example, `watch("foo", with_prefix())' +%% can return 'foo1', 'foo2', and so on. +-spec with_prefix(context()) -> context(). +with_prefix(#{key := Key} = Context) -> + with_range_end(Context, eetcd:get_prefix_range_end(Key)). + +%% @doc Specifies the range of `get', `delete' requests +%% to be equal or greater than the key in the argument. +-spec with_from_key(context()) -> context(). +with_from_key(Context) -> + with_range_end(Context, "\x00"). + +%% @doc Sets the byte slice for the Op's `range_end'. +-spec with_range_end(context(), iodata()) -> context(). +with_range_end(Context, End) -> + maps:put(range_end, End, Context). + +%% @doc @equiv watch(name(), context(), 5000). +-spec watch(name(), context()) -> + {ok, watch_conn()} | {error, {stream_error | conn_error | http2_down, term()} | timeout}. +watch(Name, CreateReq) -> + watch(Name, CreateReq, 5000). + +%% @doc Watch watches for events happening or that have happened. Both input and output are streams; +%% the input stream is for creating watchers and the output stream sends events. +%% One watch RPC can watch on multiple key ranges, streaming events for several watches at once. +%% The entire event history can be watched starting from the last compaction revision. +%% +%% Watch creates a watcher. The watcher watches the events happening or +%% happened on the given key or range [key, end) from the given startRev. +%% +%% The whole event history can be watched unless compacted. +%% If `startRev <= 0', watch observes events after currentRev. +%% +%% The returned "id" is the ID of this watcher. It appears as WatchID +%% in events that are sent to the created watcher through stream channel. +-spec watch(name(), context(), pos_integer()) -> + {ok, watch_conn()} | {error, {stream_error | conn_error | http2_down, term()} | timeout}. +watch(Name, CreateReq, Timeout) -> + Request = #{request_union => {create_request, CreateReq}}, + {ok, Gun, StreamRef} = eetcd_watch_gen:watch(Name), + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.WatchRequest', nofin), + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Body} -> + {ok, + #{ + created := true, + canceled := false, + compact_revision := CompactRev, + header := #{revision := Rev}, + watch_id := WatchId + }, <<>>} + = eetcd_grpc:decode(identity, Body, 'Etcd.WatchResponse'), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + revision => Rev, + compact_revision => CompactRev, + watch_id => WatchId, + unprocessed => <<>> + } + }; + {error, _} = Err1 -> + erlang:demonitor(MRef, [flush]), + Err1 + end; + {response, fin, 200, RespHeaders} -> + erlang:demonitor(MRef, [flush]), + {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, _} = Err2 -> + erlang:demonitor(MRef, [flush]), + Err2 + end. + +%% @doc Streams the next batch of events from the given message. +%%This function processes a "message" which can be any term, but should be a message received by the process that owns the stream_ref. +%%Processing a message means that this function will parse it and check if it's a message that is directed to this connection, +%%that is, a gun_* message received on the gun connection. +%%If it is, then this function will parse the message, turn it into watch responses, and possibly take action given the responses. +%%If there's no error, this function returns {ok, WatchConn, 'Etcd.WatchResponse'()}|{more, WatchConn} +%%If there's an error, {error, {stream_error | conn_error | http2_down, term()} | timeout} is returned. +%%If the given message is not from the gun connection, this function returns unknown. +-spec watch_stream(watch_conn(), Message) -> + {ok, watch_conn(), router_pb:'Etcd.WatchResponse'()} + | {more, watch_conn()} + | unknown + | {error, {stream_error | conn_error | http2_down, term()}} when + Message :: term(). + +watch_stream(#{stream_ref := Ref, http2_pid := Pid, unprocessed := Unprocessed} = Conn, + {gun_data, Pid, Ref, nofin, Data}) -> + Bin = <>, + case eetcd_grpc:decode(identity, Bin, 'Etcd.WatchResponse') of + {ok, Resp, NewUnprocessed} -> + #{compact_revision := CompactRev, + header := #{revision := Rev}, + watch_id := WatchId} = Resp, + {ok, + Conn#{ + revision => Rev, + compact_revision => CompactRev, + watch_id => WatchId, + unprocessed => NewUnprocessed}, + Resp}; + more -> {more, Conn#{unprocessed => Bin}} + end; +watch_stream(#{stream_ref := SRef, http2_pid := Pid, monitor_ref := MRef}, + {gun_error, Pid, SRef, Reason}) -> %% stream error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {stream_error, Reason}}; +watch_stream(#{http2_pid := Pid, stream_ref := SRef, monitor_ref := MRef}, + {gun_error, Pid, Reason}) -> %% gun connection process state error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {conn_error, Reason}}; +watch_stream(#{http2_pid := Pid, monitor_ref := MRef}, + {'DOWN', MRef, process, Pid, Reason}) -> %% gun connection down + erlang:demonitor(MRef, [flush]), + {error, {http2_down, Reason}}; +watch_stream(_Conn, _UnKnow) -> unknown. + +%% @doc Rev returns the current revision of the KV the stream watches on. + +rev(#{revision := Rev}) -> Rev. + +%% @doc Cancel watching so that no more events are transmitted. +%% This is a synchronous operation. +%% Other change events will be returned in OtherEvents when these events arrive between the request and the response. +-spec unwatch(watch_conn(), Timeout) -> + {ok, router_pb:'Etcd.WatchResponse'(), OtherEvents} + | {error, {stream_error | conn_error | http2_down, term()} | timeout, OtherEvents} when + Timeout :: pos_integer(), + OtherEvents :: [router_pb:'Etcd.WatchResponse'()]. +unwatch(WatchConn, Timeout) -> + #{ + http2_pid := Gun, + monitor_ref := MRef, + stream_ref := StreamRef, + watch_id := WatchId, + unprocessed := Unprocessed + } = WatchConn, + Request = #{request_union => {cancel_request, #{watch_id => WatchId}}}, + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.WatchRequest', fin), + await_unwatch_resp(Gun, StreamRef, Unprocessed, WatchId, Timeout, MRef, []). + +%%==================================================================== +%% Internal functions +%%==================================================================== + +await_unwatch_resp(Gun, StreamRef, Unprocessed, WatchId, Timeout, MRef, Acc) -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Data} -> + Bin = <>, + case eetcd_grpc:decode(identity, Bin, 'Etcd.WatchResponse') of + {ok, Resp, NewUnprocessed} -> + case Resp of + #{created := false, watch_id := WatchId, canceled := true} -> + erlang:demonitor(MRef, [flush]), + gun:cancel(Gun, StreamRef), + {ok, Resp, lists:reverse(Acc)}; + OtherEvent -> + await_unwatch_resp(Gun, StreamRef, NewUnprocessed, WatchId, Timeout, MRef, [OtherEvent | Acc]) + end; + more -> + await_unwatch_resp(Gun, StreamRef, Bin, WatchId, Timeout, MRef, Acc) + end; + {error, Reason} -> {error, Reason, lists:reverse(Acc)} + end. diff --git a/deps/eetcd/src/protos/auth_pb.erl b/deps/eetcd/src/protos/auth_pb.erl new file mode 100644 index 0000000000000000000000000000000000000000..513bdca5417f5e0b42cbc649aad9c5a0b6f57f17 --- /dev/null +++ b/deps/eetcd/src/protos/auth_pb.erl @@ -0,0 +1,29983 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(auth_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_authpb.Permission.Type'/1, 'enum_value_by_symbol_authpb.Permission.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'authpb.Permission.Type'() :: 'READ' | 'WRITE' | 'READWRITE'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['authpb.Permission.Type'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'authpb.UserAddOptions'() :: + #{no_password => boolean() | 0 | 1 % = 1 + }. + +-type 'authpb.User'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + roles => [iodata()], % = 3 + options => 'authpb.UserAddOptions'() % = 4 + }. + +-type 'authpb.Permission'() :: + #{permType => 'READ' | 'WRITE' | 'READWRITE' | integer(), % = 1, enum authpb.Permission.Type + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'authpb.Role'() :: + #{name => iodata(), % = 1 + keyPermission => ['authpb.Permission'()] % = 2 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['authpb.UserAddOptions'/0, 'authpb.User'/0, 'authpb.Permission'/0, 'authpb.Role'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'encode_msg_authpb.UserAddOptions'(id(Msg, TrUserData), + TrUserData); + 'authpb.User' -> + 'encode_msg_authpb.User'(id(Msg, TrUserData), + TrUserData); + 'authpb.Permission' -> + 'encode_msg_authpb.Permission'(id(Msg, TrUserData), + TrUserData); + 'authpb.Role' -> + 'encode_msg_authpb.Role'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_authpb.UserAddOptions'(Msg, TrUserData) -> + 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_authpb.UserAddOptions'(#{} = M, Bin, + TrUserData) -> + case M of + #{no_password := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_authpb.User'(Msg, TrUserData) -> + 'encode_msg_authpb.User'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.User'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{roles := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_authpb.User_roles'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= undefined -> B3; + true -> + 'e_mfield_authpb.User_options'(TrF4, <>, + TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_authpb.Permission'(Msg, TrUserData) -> + 'encode_msg_authpb.Permission'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Permission'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{permType := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'READ'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_authpb.Permission.Type'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.Role'(Msg, TrUserData) -> + 'encode_msg_authpb.Role'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Role'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keyPermission := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_authpb.Role_keyPermission'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_field_authpb.User_roles'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_authpb.User_roles'(Rest, Bin3, TrUserData); +'e_field_authpb.User_roles'([], Bin, _TrUserData) -> + Bin. + +'e_mfield_authpb.User_options'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_authpb.Role_keyPermission'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.Role_keyPermission'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_authpb.Role_keyPermission'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_authpb.Role_keyPermission'(Rest, Bin3, + TrUserData); +'e_field_authpb.Role_keyPermission'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_authpb.Permission.Type'('READ', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('WRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('READWRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('authpb.UserAddOptions', Bin, + TrUserData) -> + id('decode_msg_authpb.UserAddOptions'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.User', Bin, TrUserData) -> + id('decode_msg_authpb.User'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Permission', Bin, + TrUserData) -> + id('decode_msg_authpb.Permission'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Role', Bin, TrUserData) -> + id('decode_msg_authpb.Role'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_authpb.UserAddOptions'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Bin, 0, 0, + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.UserAddOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}; +'dfp_read_field_def_authpb.UserAddOptions'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_authpb.UserAddOptions'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_authpb.UserAddOptions'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.UserAddOptions'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_authpb.UserAddOptions'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_authpb.UserAddOptions'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}. + +'d_field_authpb.UserAddOptions_no_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'d_field_authpb.UserAddOptions_no_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.UserAddOptions'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_authpb.UserAddOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_authpb.UserAddOptions'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_authpb.UserAddOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_authpb.UserAddOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_authpb.UserAddOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.UserAddOptions'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_authpb.UserAddOptions'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_authpb.UserAddOptions'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_authpb.UserAddOptions'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_authpb.User'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Bin, 0, 0, + id(<<>>, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_authpb.User'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_password'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_roles'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_options'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end; +'dfp_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.User_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 18 -> + 'd_field_authpb.User_password'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 26 -> + 'd_field_authpb.User_roles'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 34 -> + 'd_field_authpb.User_options'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 1 -> + 'skip_64_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_authpb.User'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_authpb.User'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end. + +'d_field_authpb.User_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_roles'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_roles'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_roles'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, TrUserData). + +'d_field_authpb.User_options'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_options'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, F@_3, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_authpb.User'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_authpb.User'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_authpb.User'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.User'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_authpb.User'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.User'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_authpb.User'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_authpb.User'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_authpb.Permission'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Bin, 0, 0, + id('READ', TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_authpb.Permission'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_permType'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.Permission_permType'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_authpb.Permission_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_authpb.Permission_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_authpb.Permission'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_authpb.Permission'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_authpb.Permission_permType'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_permType'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_permType'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_authpb.Permission.Type'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_authpb.Permission_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_authpb.Permission_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_authpb.Permission'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_authpb.Permission'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_authpb.Permission'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Permission'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_authpb.Permission'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Permission'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_authpb.Permission'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_authpb.Permission'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_authpb.Role'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Bin, 0, 0, + id(<<>>, TrUserData), id([], TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.Role'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_name'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_authpb.Role'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_keyPermission'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData) -> + 'dg_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData). + +'dg_read_field_def_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.Role_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_authpb.Role_keyPermission'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.Role'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 3 -> + 'skip_group_authpb.Role'(Rest, Key bsr 3, 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end. + +'d_field_authpb.Role_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_authpb.Role_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_authpb.Role_keyPermission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_keyPermission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_authpb.Role_keyPermission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_authpb.Role'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_authpb.Role'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_authpb.Role'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_length_delimited_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'skip_length_delimited_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Role'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_authpb.Role'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Role'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_authpb.Role'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_64_authpb.Role'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_authpb.Permission.Type'(0) -> 'READ'; +'d_enum_authpb.Permission.Type'(1) -> 'WRITE'; +'d_enum_authpb.Permission.Type'(2) -> 'READWRITE'; +'d_enum_authpb.Permission.Type'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'merge_msg_authpb.UserAddOptions'(Prev, New, + TrUserData); + 'authpb.User' -> + 'merge_msg_authpb.User'(Prev, New, TrUserData); + 'authpb.Permission' -> + 'merge_msg_authpb.Permission'(Prev, New, TrUserData); + 'authpb.Role' -> + 'merge_msg_authpb.Role'(Prev, New, TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.UserAddOptions'/3}). +'merge_msg_authpb.UserAddOptions'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{no_password := NFno_password}} -> + S1#{no_password => NFno_password}; + {#{no_password := PFno_password}, _} -> + S1#{no_password => PFno_password}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.User'/3}). +'merge_msg_authpb.User'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S3#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S3#{roles => NFroles}; + {#{roles := PFroles}, _} -> S3#{roles => PFroles}; + {_, _} -> S3 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Permission'/3}). +'merge_msg_authpb.Permission'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{permType := NFpermType}} -> + S1#{permType => NFpermType}; + {#{permType := PFpermType}, _} -> + S1#{permType => PFpermType}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Role'/3}). +'merge_msg_authpb.Role'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{keyPermission := PFkeyPermission}, + #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => + 'erlang_++'(PFkeyPermission, NFkeyPermission, + TrUserData)}; + {_, #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => NFkeyPermission}; + {#{keyPermission := PFkeyPermission}, _} -> + S2#{keyPermission => PFkeyPermission}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'v_msg_authpb.UserAddOptions'(Msg, [MsgName], + TrUserData); + 'authpb.User' -> + 'v_msg_authpb.User'(Msg, [MsgName], TrUserData); + 'authpb.Permission' -> + 'v_msg_authpb.Permission'(Msg, [MsgName], TrUserData); + 'authpb.Role' -> + 'v_msg_authpb.Role'(Msg, [MsgName], TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_authpb.UserAddOptions'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.UserAddOptions'/3}). +'v_msg_authpb.UserAddOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{no_password := F1} -> + v_type_bool(F1, [no_password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (no_password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.UserAddOptions'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.UserAddOptions'}, + M, Path); +'v_msg_authpb.UserAddOptions'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.UserAddOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.User'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.User'/3}). +'v_msg_authpb.User'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_bytes(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{roles := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [roles | Path]) + end; + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_authpb.UserAddOptions'(F4, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (roles) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.User'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.User'}, + M, Path); +'v_msg_authpb.User'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.User'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Permission'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Permission'/3}). +'v_msg_authpb.Permission'(#{} = M, Path, TrUserData) -> + case M of + #{permType := F1} -> + 'v_enum_authpb.Permission.Type'(F1, [permType | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (permType) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Permission'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Permission'}, + M, Path); +'v_msg_authpb.Permission'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Permission'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Role'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Role'/3}). +'v_msg_authpb.Role'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{keyPermission := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, + [keyPermission | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [keyPermission | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (keyPermission) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Role'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Role'}, + M, Path); +'v_msg_authpb.Role'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Role'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_authpb.Permission.Type'/3}). +-dialyzer({nowarn_function,'v_enum_authpb.Permission.Type'/3}). +'v_enum_authpb.Permission.Type'('READ', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('WRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('READWRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_authpb.Permission.Type'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'authpb.Permission.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'authpb.Permission.Type'}, + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'authpb.UserAddOptions'}, + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'authpb.User'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.Permission'}, + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'authpb.Role'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['authpb.Permission.Type', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('authpb.UserAddOptions') -> + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('authpb.User') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.Permission') -> + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('authpb.Role') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('authpb.Permission.Type') -> + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('authpb.Permission.Type', Value) -> + 'enum_symbol_by_value_authpb.Permission.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('authpb.Permission.Type', Sym) -> + 'enum_value_by_symbol_authpb.Permission.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_authpb.Permission.Type'(0) -> + 'READ'; +'enum_symbol_by_value_authpb.Permission.Type'(1) -> + 'WRITE'; +'enum_symbol_by_value_authpb.Permission.Type'(2) -> + 'READWRITE'. + + +'enum_value_by_symbol_authpb.Permission.Type'('READ') -> + 0; +'enum_value_by_symbol_authpb.Permission.Type'('WRITE') -> + 1; +'enum_value_by_symbol_authpb.Permission.Type'('READWRITE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"authpb.UserAddOptions">>) -> 'authpb.UserAddOptions'; +fqbin_to_msg_name(<<"authpb.User">>) -> 'authpb.User'; +fqbin_to_msg_name(<<"authpb.Permission">>) -> 'authpb.Permission'; +fqbin_to_msg_name(<<"authpb.Role">>) -> 'authpb.Role'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('authpb.UserAddOptions') -> <<"authpb.UserAddOptions">>; +msg_name_to_fqbin('authpb.User') -> <<"authpb.User">>; +msg_name_to_fqbin('authpb.Permission') -> <<"authpb.Permission">>; +msg_name_to_fqbin('authpb.Role') -> <<"authpb.Role">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"authpb.Permission.Type">>) -> 'authpb.Permission.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('authpb.Permission.Type') -> <<"authpb.Permission.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> authpb. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "auth.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["auth.proto", "gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["auth", "gogo", "descriptor"]. + + +get_msg_containment("auth") -> + ['authpb.Permission', 'authpb.Role', 'authpb.User', + 'authpb.UserAddOptions']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("auth") -> authpb; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("auth") -> []; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("auth") -> []; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("auth") -> + ['authpb.Permission.Type']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"authpb.User">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.UserAddOptions">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Role">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Permission">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"authpb.Permission.Type">>) -> "auth"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"authpb">>) -> ["auth"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/gogo_pb.erl b/deps/eetcd/src/protos/gogo_pb.erl new file mode 100644 index 0000000000000000000000000000000000000000..a849b7cb12a1e2531804e552ee773e481bc5dcee --- /dev/null +++ b/deps/eetcd/src/protos/gogo_pb.erl @@ -0,0 +1,28734 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(gogo_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> gogoproto. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "gogo.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["gogo", "descriptor"]. + + +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/health_pb.erl b/deps/eetcd/src/protos/health_pb.erl new file mode 100644 index 0000000000000000000000000000000000000000..b1fc2ba188a18bd32dfad97b5596860f83827872 --- /dev/null +++ b/deps/eetcd/src/protos/health_pb.erl @@ -0,0 +1,1143 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.10.5 +-module(health_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'/1, 'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'grpcHealthV1.HealthCheckResponse.ServingStatus'() :: 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN'. +-export_type(['grpcHealthV1.HealthCheckResponse.ServingStatus'/0]). + +%% message types +-type 'grpcHealthV1.HealthCheckRequest'() :: + #{service => iodata() % = 1 + }. + +-type 'grpcHealthV1.HealthCheckResponse'() :: + #{status => 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN' | integer() % = 1, enum grpcHealthV1.HealthCheckResponse.ServingStatus + }. + +-export_type(['grpcHealthV1.HealthCheckRequest'/0, 'grpcHealthV1.HealthCheckResponse'/0]). + +-spec encode_msg('grpcHealthV1.HealthCheckRequest'() | 'grpcHealthV1.HealthCheckResponse'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('grpcHealthV1.HealthCheckRequest'() | 'grpcHealthV1.HealthCheckResponse'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'encode_msg_grpcHealthV1.HealthCheckRequest'(id(Msg, + TrUserData), + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'encode_msg_grpcHealthV1.HealthCheckResponse'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_grpcHealthV1.HealthCheckRequest'(Msg, + TrUserData) -> + 'encode_msg_grpcHealthV1.HealthCheckRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_grpcHealthV1.HealthCheckRequest'(#{} = M, + Bin, TrUserData) -> + case M of + #{service := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_grpcHealthV1.HealthCheckResponse'(Msg, + TrUserData) -> + 'encode_msg_grpcHealthV1.HealthCheckResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_grpcHealthV1.HealthCheckResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{status := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'UNKNOWN'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> + not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) + when is_binary(B), byte_size(B) =/= 0 -> + true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('grpcHealthV1.HealthCheckRequest', + Bin, TrUserData) -> + id('decode_msg_grpcHealthV1.HealthCheckRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('grpcHealthV1.HealthCheckResponse', + Bin, TrUserData) -> + id('decode_msg_grpcHealthV1.HealthCheckResponse'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_grpcHealthV1.HealthCheckRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(<<>>, + 0, 0, F@_1, _) -> + #{service => F@_1}; +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_grpcHealthV1.HealthCheckRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_grpcHealthV1.HealthCheckRequest'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_grpcHealthV1.HealthCheckRequest'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_grpcHealthV1.HealthCheckRequest'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<>>, + 0, 0, F@_1, _) -> + #{service => F@_1}. + +'d_field_grpcHealthV1.HealthCheckRequest_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_grpcHealthV1.HealthCheckRequest_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_grpcHealthV1.HealthCheckRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_grpcHealthV1.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_grpcHealthV1.HealthCheckRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_grpcHealthV1.HealthCheckRequest'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_grpcHealthV1.HealthCheckRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_grpcHealthV1.HealthCheckRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_grpcHealthV1.HealthCheckResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Bin, + 0, 0, + id('UNKNOWN', + TrUserData), + TrUserData). + +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(<<>>, + 0, 0, F@_1, _) -> + #{status => F@_1}; +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_grpcHealthV1.HealthCheckResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_grpcHealthV1.HealthCheckResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_grpcHealthV1.HealthCheckResponse'(Rest, + Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_grpcHealthV1.HealthCheckResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<>>, + 0, 0, F@_1, _) -> + #{status => F@_1}. + +'d_field_grpcHealthV1.HealthCheckResponse_status'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_grpcHealthV1.HealthCheckResponse_status'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(begin + <> = + <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_grpcHealthV1.HealthCheckResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_grpcHealthV1.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_grpcHealthV1.HealthCheckResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_grpcHealthV1.HealthCheckResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_grpcHealthV1.HealthCheckResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_grpcHealthV1.HealthCheckResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V) -> + V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'merge_msg_grpcHealthV1.HealthCheckRequest'(Prev, New, + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'merge_msg_grpcHealthV1.HealthCheckResponse'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_grpcHealthV1.HealthCheckRequest'/3}). +'merge_msg_grpcHealthV1.HealthCheckRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{service := NFservice}} -> + S1#{service => NFservice}; + {#{service := PFservice}, _} -> + S1#{service => PFservice}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_grpcHealthV1.HealthCheckResponse'/3}). +'merge_msg_grpcHealthV1.HealthCheckResponse'(PMsg, NMsg, + _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{status := NFstatus}} -> S1#{status => NFstatus}; + {#{status := PFstatus}, _} -> S1#{status => PFstatus}; + _ -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'v_msg_grpcHealthV1.HealthCheckRequest'(Msg, [MsgName], + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'v_msg_grpcHealthV1.HealthCheckResponse'(Msg, [MsgName], + TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_grpcHealthV1.HealthCheckRequest'/3}). +-dialyzer({nowarn_function,'v_msg_grpcHealthV1.HealthCheckRequest'/3}). +'v_msg_grpcHealthV1.HealthCheckRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{service := F1} -> + v_type_string(F1, [service | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (service) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_grpcHealthV1.HealthCheckRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'grpcHealthV1.HealthCheckRequest'}, + M, Path); +'v_msg_grpcHealthV1.HealthCheckRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'grpcHealthV1.HealthCheckRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_grpcHealthV1.HealthCheckResponse'/3}). +-dialyzer({nowarn_function,'v_msg_grpcHealthV1.HealthCheckResponse'/3}). +'v_msg_grpcHealthV1.HealthCheckResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{status := F1} -> + 'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(F1, + [status + | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (status) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_grpcHealthV1.HealthCheckResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'grpcHealthV1.HealthCheckResponse'}, + M, Path); +'v_msg_grpcHealthV1.HealthCheckResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'grpcHealthV1.HealthCheckResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'/3}). +-dialyzer({nowarn_function,'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'/3}). +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]}, + {{msg, 'grpcHealthV1.HealthCheckRequest'}, + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'grpcHealthV1.HealthCheckResponse'}, + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]}]. + + +get_msg_names() -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']. + + +get_enum_names() -> + ['grpcHealthV1.HealthCheckResponse.ServingStatus']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('grpcHealthV1.HealthCheckRequest') -> + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]; +find_msg_def('grpcHealthV1.HealthCheckResponse') -> + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('grpcHealthV1.HealthCheckResponse.ServingStatus') -> + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('grpcHealthV1.HealthCheckResponse.ServingStatus', + Value) -> + 'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(Value). + + +enum_value_by_symbol('grpcHealthV1.HealthCheckResponse.ServingStatus', + Sym) -> + 'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'(Sym). + + +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'. + + +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN') -> + 0; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING') -> + 1; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING') -> + 2; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN') -> + 3. + + +get_service_names() -> ['grpcHealthV1.Health']. + + +get_service_def('grpcHealthV1.Health') -> + {{service, 'grpcHealthV1.Health'}, + [#{name => 'Check', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Watch', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}]}; +get_service_def(_) -> error. + + +get_rpc_names('grpcHealthV1.Health') -> + ['Check', 'Watch']; +get_rpc_names(_) -> error. + + +find_rpc_def('grpcHealthV1.Health', RpcName) -> + 'find_rpc_def_grpcHealthV1.Health'(RpcName); +find_rpc_def(_, _) -> error. + + +'find_rpc_def_grpcHealthV1.Health'('Check') -> + #{name => 'Check', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_grpcHealthV1.Health'('Watch') -> + #{name => 'Watch', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_grpcHealthV1.Health'(_) -> error. + + +fetch_rpc_def(ServiceName, RpcName) -> + case find_rpc_def(ServiceName, RpcName) of + Def when is_map(Def) -> Def; + error -> + erlang:error({no_such_rpc, ServiceName, RpcName}) + end. + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +fqbin_to_service_name(<<"grpcHealthV1.Health">>) -> 'grpcHealthV1.Health'; +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +service_name_to_fqbin('grpcHealthV1.Health') -> <<"grpcHealthV1.Health">>; +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +fqbins_to_service_and_rpc_name(<<"grpcHealthV1.Health">>, <<"Check">>) -> + {'grpcHealthV1.Health', 'Check'}; +fqbins_to_service_and_rpc_name(<<"grpcHealthV1.Health">>, <<"Watch">>) -> + {'grpcHealthV1.Health', 'Watch'}; +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +service_and_rpc_name_to_fqbins('grpcHealthV1.Health', + 'Check') -> + {<<"grpcHealthV1.Health">>, <<"Check">>}; +service_and_rpc_name_to_fqbins('grpcHealthV1.Health', + 'Watch') -> + {<<"grpcHealthV1.Health">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"grpcHealthV1.HealthCheckRequest">>) -> + 'grpcHealthV1.HealthCheckRequest'; +fqbin_to_msg_name(<<"grpcHealthV1.HealthCheckResponse">>) -> + 'grpcHealthV1.HealthCheckResponse'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('grpcHealthV1.HealthCheckRequest') -> + <<"grpcHealthV1.HealthCheckRequest">>; +msg_name_to_fqbin('grpcHealthV1.HealthCheckResponse') -> + <<"grpcHealthV1.HealthCheckResponse">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"grpcHealthV1.HealthCheckResponse.ServingStatus">>) -> + 'grpcHealthV1.HealthCheckResponse.ServingStatus'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('grpcHealthV1.HealthCheckResponse.ServingStatus') -> + <<"grpcHealthV1.HealthCheckResponse.ServingStatus">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> grpcHealthV1. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "health.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> ["health.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["health"]. + + +get_msg_containment("health") -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("health") -> grpcHealthV1; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("health") -> + ['grpcHealthV1.Health']; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("health") -> + [{'grpcHealthV1.Health', 'Check'}, + {'grpcHealthV1.Health', 'Watch'}]; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("health") -> + ['grpcHealthV1.HealthCheckResponse.ServingStatus']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"grpcHealthV1.HealthCheckRequest">>) -> "health"; +get_proto_by_msg_name_as_fqbin(<<"grpcHealthV1.HealthCheckResponse">>) -> "health"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +get_proto_by_service_name_as_fqbin(<<"grpcHealthV1.Health">>) -> "health"; +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"grpcHealthV1.HealthCheckResponse.ServingStatus">>) -> "health"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"grpcHealthV1">>) -> ["health"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.10.5". + +gpb_version_as_list() -> + [4,10,5]. diff --git a/deps/eetcd/src/protos/kv_pb.erl b/deps/eetcd/src/protos/kv_pb.erl new file mode 100644 index 0000000000000000000000000000000000000000..77f568984f6b58831106c8f8231279821b53003d --- /dev/null +++ b/deps/eetcd/src/protos/kv_pb.erl @@ -0,0 +1,29658 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(kv_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_mvccpb.Event.EventType'/1, 'enum_value_by_symbol_mvccpb.Event.EventType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'mvccpb.Event.EventType'() :: 'PUT' | 'DELETE'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['mvccpb.Event.EventType'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'mvccpb.KeyValue'() :: + #{key => iodata(), % = 1 + create_revision => integer(), % = 2, 32 bits + mod_revision => integer(), % = 3, 32 bits + version => integer(), % = 4, 32 bits + value => iodata(), % = 5 + lease => integer() % = 6, 32 bits + }. + +-type 'mvccpb.Event'() :: + #{type => 'PUT' | 'DELETE' | integer(), % = 1, enum mvccpb.Event.EventType + kv => 'mvccpb.KeyValue'(), % = 2 + prev_kv => 'mvccpb.KeyValue'() % = 3 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['mvccpb.KeyValue'/0, 'mvccpb.Event'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('mvccpb.KeyValue'() | 'mvccpb.Event'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('mvccpb.KeyValue'() | 'mvccpb.Event'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'encode_msg_mvccpb.KeyValue'(id(Msg, TrUserData), + TrUserData); + 'mvccpb.Event' -> + 'encode_msg_mvccpb.Event'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_mvccpb.KeyValue'(Msg, TrUserData) -> + 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.KeyValue'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{create_revision := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{mod_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{version := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{value := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> + e_type_int64(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_mvccpb.Event'(Msg, TrUserData) -> + 'encode_msg_mvccpb.Event'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.Event'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{type := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'PUT'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_mvccpb.Event.EventType'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_mvccpb.Event_kv'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_mvccpb.Event_prev_kv'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_mfield_mvccpb.Event_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_mvccpb.Event_prev_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_mvccpb.Event.EventType'('PUT', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'('DELETE', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('mvccpb.KeyValue', Bin, TrUserData) -> + id('decode_msg_mvccpb.KeyValue'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.Event', Bin, TrUserData) -> + id('decode_msg_mvccpb.Event'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_mvccpb.KeyValue'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.KeyValue'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_version'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}; +'dfp_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_mvccpb.KeyValue_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 16 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 24 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 32 -> + 'd_field_mvccpb.KeyValue_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 42 -> + 'd_field_mvccpb.KeyValue_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_mvccpb.KeyValue'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}. + +'d_field_mvccpb.KeyValue_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_mvccpb.KeyValue_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_mvccpb.KeyValue'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_mvccpb.KeyValue'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.KeyValue'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_mvccpb.KeyValue'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_mvccpb.KeyValue'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_mvccpb.KeyValue'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_mvccpb.Event'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Bin, 0, 0, + id('PUT', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.Event'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_type'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_prev_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end; +'dfp_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_mvccpb.Event_type'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_mvccpb.Event_kv'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.Event'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 3 -> + 'skip_group_mvccpb.Event'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end. + +'d_field_mvccpb.Event_type'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_type'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_type'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_mvccpb.Event.EventType'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_mvccpb.Event_kv'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_kv'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_kv'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_mvccpb.Event_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + F@_2, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_mvccpb.Event'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_mvccpb.Event'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_mvccpb.Event'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.Event'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_mvccpb.Event'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.Event'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_mvccpb.Event'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_mvccpb.Event'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_mvccpb.Event.EventType'(0) -> 'PUT'; +'d_enum_mvccpb.Event.EventType'(1) -> 'DELETE'; +'d_enum_mvccpb.Event.EventType'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'merge_msg_mvccpb.KeyValue'(Prev, New, TrUserData); + 'mvccpb.Event' -> + 'merge_msg_mvccpb.Event'(Prev, New, TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.KeyValue'/3}). +'merge_msg_mvccpb.KeyValue'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{create_revision := NFcreate_revision}} -> + S2#{create_revision => NFcreate_revision}; + {#{create_revision := PFcreate_revision}, _} -> + S2#{create_revision => PFcreate_revision}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{mod_revision := NFmod_revision}} -> + S3#{mod_revision => NFmod_revision}; + {#{mod_revision := PFmod_revision}, _} -> + S3#{mod_revision => PFmod_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S4#{version => NFversion}; + {#{version := PFversion}, _} -> + S4#{version => PFversion}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S5#{value => NFvalue}; + {#{value := PFvalue}, _} -> S5#{value => PFvalue}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S6#{lease => NFlease}; + {#{lease := PFlease}, _} -> S6#{lease => PFlease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.Event'/3}). +'merge_msg_mvccpb.Event'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S1#{type => NFtype}; + {#{type := PFtype}, _} -> S1#{type => PFtype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'v_msg_mvccpb.KeyValue'(Msg, [MsgName], TrUserData); + 'mvccpb.Event' -> + 'v_msg_mvccpb.Event'(Msg, [MsgName], TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_mvccpb.KeyValue'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.KeyValue'/3}). +'v_msg_mvccpb.KeyValue'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{create_revision := F2} -> + v_type_int64(F2, [create_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{mod_revision := F3} -> + v_type_int64(F3, [mod_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{version := F4} -> + v_type_int64(F4, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F5} -> + v_type_bytes(F5, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F6} -> + v_type_int64(F6, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (create_revision) -> ok; + (mod_revision) -> ok; + (version) -> ok; + (value) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.KeyValue'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.KeyValue'}, + M, Path); +'v_msg_mvccpb.KeyValue'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.KeyValue'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.Event'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.Event'/3}). +'v_msg_mvccpb.Event'(#{} = M, Path, TrUserData) -> + case M of + #{type := F1} -> + 'v_enum_mvccpb.Event.EventType'(F1, [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + 'v_msg_mvccpb.KeyValue'(F3, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (type) -> ok; + (kv) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.Event'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.Event'}, + M, Path); +'v_msg_mvccpb.Event'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.Event'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_mvccpb.Event.EventType'/3}). +-dialyzer({nowarn_function,'v_enum_mvccpb.Event.EventType'/3}). +'v_enum_mvccpb.Event.EventType'('PUT', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'('DELETE', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_mvccpb.Event.EventType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'mvccpb.Event.EventType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'mvccpb.Event.EventType'}, + [{'PUT', 0}, {'DELETE', 1}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'mvccpb.KeyValue'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'mvccpb.Event'}, + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['mvccpb.KeyValue', 'mvccpb.Event', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['mvccpb.KeyValue', 'mvccpb.Event', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['mvccpb.Event.EventType', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('mvccpb.KeyValue') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('mvccpb.Event') -> + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('mvccpb.Event.EventType') -> + [{'PUT', 0}, {'DELETE', 1}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('mvccpb.Event.EventType', Value) -> + 'enum_symbol_by_value_mvccpb.Event.EventType'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('mvccpb.Event.EventType', Sym) -> + 'enum_value_by_symbol_mvccpb.Event.EventType'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_mvccpb.Event.EventType'(0) -> + 'PUT'; +'enum_symbol_by_value_mvccpb.Event.EventType'(1) -> + 'DELETE'. + + +'enum_value_by_symbol_mvccpb.Event.EventType'('PUT') -> + 0; +'enum_value_by_symbol_mvccpb.Event.EventType'('DELETE') -> + 1. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"mvccpb.KeyValue">>) -> 'mvccpb.KeyValue'; +fqbin_to_msg_name(<<"mvccpb.Event">>) -> 'mvccpb.Event'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('mvccpb.KeyValue') -> <<"mvccpb.KeyValue">>; +msg_name_to_fqbin('mvccpb.Event') -> <<"mvccpb.Event">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"mvccpb.Event.EventType">>) -> 'mvccpb.Event.EventType'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('mvccpb.Event.EventType') -> <<"mvccpb.Event.EventType">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> mvccpb. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "kv.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["kv.proto", "gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["kv", "gogo", "descriptor"]. + + +get_msg_containment("kv") -> + ['mvccpb.Event', 'mvccpb.KeyValue']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("kv") -> mvccpb; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("kv") -> []; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("kv") -> []; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("kv") -> + ['mvccpb.Event.EventType']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.Event">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.KeyValue">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"mvccpb.Event.EventType">>) -> "kv"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"mvccpb">>) -> ["kv"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/router_pb.erl b/deps/eetcd/src/protos/router_pb.erl new file mode 100644 index 0000000000000000000000000000000000000000..6b847307b8d5ea78ec8ad1ad25f250a1c0530266 --- /dev/null +++ b/deps/eetcd/src/protos/router_pb.erl @@ -0,0 +1,64412 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.1 +-module(router_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_Etcd.RangeRequest.SortOrder'/1, 'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'/1]). +-export(['enum_symbol_by_value_Etcd.RangeRequest.SortTarget'/1, 'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'/1]). +-export(['enum_symbol_by_value_Etcd.Compare.CompareResult'/1, 'enum_value_by_symbol_Etcd.Compare.CompareResult'/1]). +-export(['enum_symbol_by_value_Etcd.Compare.CompareTarget'/1, 'enum_value_by_symbol_Etcd.Compare.CompareTarget'/1]). +-export(['enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'/1, 'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'/1]). +-export(['enum_symbol_by_value_Etcd.AlarmType'/1, 'enum_value_by_symbol_Etcd.AlarmType'/1]). +-export(['enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'/1, 'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'/1]). +-export(['enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'/1, 'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export(['enum_symbol_by_value_mvccpb.Event.EventType'/1, 'enum_value_by_symbol_mvccpb.Event.EventType'/1]). +-export(['enum_symbol_by_value_authpb.Permission.Type'/1, 'enum_value_by_symbol_authpb.Permission.Type'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'Etcd.RangeRequest.SortOrder'() :: 'NONE' | 'ASCEND' | 'DESCEND'. +-type 'Etcd.RangeRequest.SortTarget'() :: 'KEY' | 'VERSION' | 'CREATE' | 'MOD' | 'VALUE'. +-type 'Etcd.Compare.CompareResult'() :: 'EQUAL' | 'GREATER' | 'LESS' | 'NOT_EQUAL'. +-type 'Etcd.Compare.CompareTarget'() :: 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | 'LEASE'. +-type 'Etcd.WatchCreateRequest.FilterType'() :: 'NOPUT' | 'NODELETE'. +-type 'Etcd.AlarmType'() :: 'NONE' | 'NOSPACE' | 'CORRUPT'. +-type 'Etcd.AlarmRequest.AlarmAction'() :: 'GET' | 'ACTIVATE' | 'DEACTIVATE'. +-type 'Etcd.HealthCheckResponse.ServingStatus'() :: 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-type 'mvccpb.Event.EventType'() :: 'PUT' | 'DELETE'. +-type 'authpb.Permission.Type'() :: 'READ' | 'WRITE' | 'READWRITE'. +-export_type(['Etcd.RangeRequest.SortOrder'/0, 'Etcd.RangeRequest.SortTarget'/0, 'Etcd.Compare.CompareResult'/0, 'Etcd.Compare.CompareTarget'/0, 'Etcd.WatchCreateRequest.FilterType'/0, 'Etcd.AlarmType'/0, 'Etcd.AlarmRequest.AlarmAction'/0, 'Etcd.HealthCheckResponse.ServingStatus'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0, 'mvccpb.Event.EventType'/0, 'authpb.Permission.Type'/0]). + +%% message types +-type 'Etcd.ResponseHeader'() :: + #{cluster_id => non_neg_integer(), % = 1, 64 bits + member_id => non_neg_integer(), % = 2, 64 bits + revision => integer(), % = 3, 64 bits + raft_term => non_neg_integer() % = 4, 64 bits + }. + +-type 'Etcd.RangeRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + limit => integer(), % = 3, 64 bits + revision => integer(), % = 4, 64 bits + sort_order => 'NONE' | 'ASCEND' | 'DESCEND' | integer(), % = 5, enum Etcd.RangeRequest.SortOrder + sort_target => 'KEY' | 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | integer(), % = 6, enum Etcd.RangeRequest.SortTarget + serializable => boolean() | 0 | 1, % = 7 + keys_only => boolean() | 0 | 1, % = 8 + count_only => boolean() | 0 | 1, % = 9 + min_mod_revision => integer(), % = 10, 64 bits + max_mod_revision => integer(), % = 11, 64 bits + min_create_revision => integer(), % = 12, 64 bits + max_create_revision => integer() % = 13, 64 bits + }. + +-type 'Etcd.RangeResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + kvs => ['mvccpb.KeyValue'()], % = 2 + more => boolean() | 0 | 1, % = 3 + count => integer() % = 4, 64 bits + }. + +-type 'Etcd.PutRequest'() :: + #{key => iodata(), % = 1 + value => iodata(), % = 2 + lease => integer(), % = 3, 64 bits + prev_kv => boolean() | 0 | 1, % = 4 + ignore_value => boolean() | 0 | 1, % = 5 + ignore_lease => boolean() | 0 | 1 % = 6 + }. + +-type 'Etcd.PutResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + prev_kv => 'mvccpb.KeyValue'() % = 2 + }. + +-type 'Etcd.DeleteRangeRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + prev_kv => boolean() | 0 | 1 % = 3 + }. + +-type 'Etcd.DeleteRangeResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + deleted => integer(), % = 2, 64 bits + prev_kvs => ['mvccpb.KeyValue'()] % = 3 + }. + +-type 'Etcd.RequestOp'() :: + #{request => {request_range, 'Etcd.RangeRequest'()} | {request_put, 'Etcd.PutRequest'()} | {request_delete_range, 'Etcd.DeleteRangeRequest'()} | {request_txn, 'Etcd.TxnRequest'()} % oneof + }. + +-type 'Etcd.ResponseOp'() :: + #{response => {response_range, 'Etcd.RangeResponse'()} | {response_put, 'Etcd.PutResponse'()} | {response_delete_range, 'Etcd.DeleteRangeResponse'()} | {response_txn, 'Etcd.TxnResponse'()} % oneof + }. + +-type 'Etcd.Compare'() :: + #{result => 'EQUAL' | 'GREATER' | 'LESS' | 'NOT_EQUAL' | integer(), % = 1, enum Etcd.Compare.CompareResult + target => 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | 'LEASE' | integer(), % = 2, enum Etcd.Compare.CompareTarget + key => iodata(), % = 3 + target_union => {version, integer()} | {create_revision, integer()} | {mod_revision, integer()} | {value, iodata()} | {lease, integer()}, % oneof + range_end => iodata() % = 64 + }. + +-type 'Etcd.TxnRequest'() :: + #{compare => ['Etcd.Compare'()], % = 1 + success => ['Etcd.RequestOp'()], % = 2 + failure => ['Etcd.RequestOp'()] % = 3 + }. + +-type 'Etcd.TxnResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + succeeded => boolean() | 0 | 1, % = 2 + responses => ['Etcd.ResponseOp'()] % = 3 + }. + +-type 'Etcd.CompactionRequest'() :: + #{revision => integer(), % = 1, 64 bits + physical => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.CompactionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.HashRequest'() :: + #{ + }. + +-type 'Etcd.HashKVRequest'() :: + #{revision => integer() % = 1, 64 bits + }. + +-type 'Etcd.HashKVResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + hash => non_neg_integer(), % = 2, 32 bits + compact_revision => integer() % = 3, 64 bits + }. + +-type 'Etcd.HashResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + hash => non_neg_integer() % = 2, 32 bits + }. + +-type 'Etcd.SnapshotRequest'() :: + #{ + }. + +-type 'Etcd.SnapshotResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + remaining_bytes => non_neg_integer(), % = 2, 64 bits + blob => iodata() % = 3 + }. + +-type 'Etcd.WatchRequest'() :: + #{request_union => {create_request, 'Etcd.WatchCreateRequest'()} | {cancel_request, 'Etcd.WatchCancelRequest'()} | {progress_request, 'Etcd.WatchProgressRequest'()} % oneof + }. + +-type 'Etcd.WatchCreateRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + start_revision => integer(), % = 3, 64 bits + progress_notify => boolean() | 0 | 1, % = 4 + filters => ['NOPUT' | 'NODELETE' | integer()], % = 5, enum Etcd.WatchCreateRequest.FilterType + prev_kv => boolean() | 0 | 1, % = 6 + watch_id => integer(), % = 7, 64 bits + fragment => boolean() | 0 | 1 % = 8 + }. + +-type 'Etcd.WatchCancelRequest'() :: + #{watch_id => integer() % = 1, 64 bits + }. + +-type 'Etcd.WatchProgressRequest'() :: + #{ + }. + +-type 'Etcd.WatchResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + watch_id => integer(), % = 2, 64 bits + created => boolean() | 0 | 1, % = 3 + canceled => boolean() | 0 | 1, % = 4 + compact_revision => integer(), % = 5, 64 bits + cancel_reason => iodata(), % = 6 + fragment => boolean() | 0 | 1, % = 7 + events => ['mvccpb.Event'()] % = 11 + }. + +-type 'Etcd.LeaseGrantRequest'() :: + #{'TTL' => integer(), % = 1, 64 bits + 'ID' => integer() % = 2, 64 bits + }. + +-type 'Etcd.LeaseGrantResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer(), % = 3, 64 bits + error => iodata() % = 4 + }. + +-type 'Etcd.LeaseRevokeRequest'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseRevokeResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.LeaseCheckpoint'() :: + #{'ID' => integer(), % = 1, 64 bits + remaining_TTL => integer() % = 2, 64 bits + }. + +-type 'Etcd.LeaseCheckpointRequest'() :: + #{checkpoints => ['Etcd.LeaseCheckpoint'()] % = 1 + }. + +-type 'Etcd.LeaseCheckpointResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.LeaseKeepAliveRequest'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseKeepAliveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer() % = 3, 64 bits + }. + +-type 'Etcd.LeaseTimeToLiveRequest'() :: + #{'ID' => integer(), % = 1, 64 bits + keys => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.LeaseTimeToLiveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer(), % = 3, 64 bits + grantedTTL => integer(), % = 4, 64 bits + keys => [iodata()] % = 5 + }. + +-type 'Etcd.LeaseLeasesRequest'() :: + #{ + }. + +-type 'Etcd.LeaseStatus'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseLeasesResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + leases => ['Etcd.LeaseStatus'()] % = 2 + }. + +-type 'Etcd.Member'() :: + #{'ID' => non_neg_integer(), % = 1, 64 bits + name => iodata(), % = 2 + peerURLs => [iodata()], % = 3 + clientURLs => [iodata()], % = 4 + isLearner => boolean() | 0 | 1 % = 5 + }. + +-type 'Etcd.MemberAddRequest'() :: + #{peerURLs => [iodata()], % = 1 + isLearner => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.MemberAddResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + member => 'Etcd.Member'(), % = 2 + members => ['Etcd.Member'()] % = 3 + }. + +-type 'Etcd.MemberRemoveRequest'() :: + #{'ID' => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MemberRemoveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberUpdateRequest'() :: + #{'ID' => non_neg_integer(), % = 1, 64 bits + peerURLs => [iodata()] % = 2 + }. + +-type 'Etcd.MemberUpdateResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberListRequest'() :: + #{ + }. + +-type 'Etcd.MemberListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberPromoteRequest'() :: + #{'ID' => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MemberPromoteResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.DefragmentRequest'() :: + #{ + }. + +-type 'Etcd.DefragmentResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.MoveLeaderRequest'() :: + #{targetID => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MoveLeaderResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AlarmRequest'() :: + #{action => 'GET' | 'ACTIVATE' | 'DEACTIVATE' | integer(), % = 1, enum Etcd.AlarmRequest.AlarmAction + memberID => non_neg_integer(), % = 2, 64 bits + alarm => 'NONE' | 'NOSPACE' | 'CORRUPT' | integer() % = 3, enum Etcd.AlarmType + }. + +-type 'Etcd.AlarmMember'() :: + #{memberID => non_neg_integer(), % = 1, 64 bits + alarm => 'NONE' | 'NOSPACE' | 'CORRUPT' | integer() % = 2, enum Etcd.AlarmType + }. + +-type 'Etcd.AlarmResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + alarms => ['Etcd.AlarmMember'()] % = 2 + }. + +-type 'Etcd.StatusRequest'() :: + #{ + }. + +-type 'Etcd.StatusResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + version => iodata(), % = 2 + dbSize => integer(), % = 3, 64 bits + leader => non_neg_integer(), % = 4, 64 bits + raftIndex => non_neg_integer(), % = 5, 64 bits + raftTerm => non_neg_integer(), % = 6, 64 bits + raftAppliedIndex => non_neg_integer(), % = 7, 64 bits + errors => [iodata()], % = 8 + dbSizeInUse => integer(), % = 9, 64 bits + isLearner => boolean() | 0 | 1 % = 10 + }. + +-type 'Etcd.AuthEnableRequest'() :: + #{ + }. + +-type 'Etcd.AuthDisableRequest'() :: + #{ + }. + +-type 'Etcd.AuthenticateRequest'() :: + #{name => iodata(), % = 1 + password => iodata() % = 2 + }. + +-type 'Etcd.AuthUserAddRequest'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + options => 'authpb.UserAddOptions'() % = 3 + }. + +-type 'Etcd.AuthUserGetRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthUserDeleteRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthUserChangePasswordRequest'() :: + #{name => iodata(), % = 1 + password => iodata() % = 2 + }. + +-type 'Etcd.AuthUserGrantRoleRequest'() :: + #{user => iodata(), % = 1 + role => iodata() % = 2 + }. + +-type 'Etcd.AuthUserRevokeRoleRequest'() :: + #{name => iodata(), % = 1 + role => iodata() % = 2 + }. + +-type 'Etcd.AuthRoleAddRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthRoleGetRequest'() :: + #{role => iodata() % = 1 + }. + +-type 'Etcd.AuthUserListRequest'() :: + #{ + }. + +-type 'Etcd.AuthRoleListRequest'() :: + #{ + }. + +-type 'Etcd.AuthRoleDeleteRequest'() :: + #{role => iodata() % = 1 + }. + +-type 'Etcd.AuthRoleGrantPermissionRequest'() :: + #{name => iodata(), % = 1 + perm => 'authpb.Permission'() % = 2 + }. + +-type 'Etcd.AuthRoleRevokePermissionRequest'() :: + #{role => iodata(), % = 1 + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'Etcd.AuthEnableResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthDisableResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthenticateResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + token => iodata() % = 2 + }. + +-type 'Etcd.AuthUserAddResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserGetResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + roles => [iodata()] % = 2 + }. + +-type 'Etcd.AuthUserDeleteResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserChangePasswordResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserGrantRoleResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserRevokeRoleResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleAddResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleGetResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + perm => ['authpb.Permission'()] % = 2 + }. + +-type 'Etcd.AuthRoleListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + roles => [iodata()] % = 2 + }. + +-type 'Etcd.AuthUserListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + users => [iodata()] % = 2 + }. + +-type 'Etcd.AuthRoleDeleteResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleGrantPermissionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleRevokePermissionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.HealthCheckRequest'() :: + #{service => iodata() % = 1 + }. + +-type 'Etcd.HealthCheckResponse'() :: + #{status => 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN' | integer() % = 1, enum Etcd.HealthCheckResponse.ServingStatus + }. + +-type 'Etcd.LockRequest'() :: + #{name => iodata(), % = 1 + lease => integer() % = 2, 64 bits + }. + +-type 'Etcd.LockResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + key => iodata() % = 2 + }. + +-type 'Etcd.UnlockRequest'() :: + #{key => iodata() % = 1 + }. + +-type 'Etcd.UnlockResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.CampaignRequest'() :: + #{name => iodata(), % = 1 + lease => integer(), % = 2, 64 bits + value => iodata() % = 3 + }. + +-type 'Etcd.CampaignResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + leader => 'Etcd.LeaderKey'() % = 2 + }. + +-type 'Etcd.LeaderKey'() :: + #{name => iodata(), % = 1 + key => iodata(), % = 2 + rev => integer(), % = 3, 64 bits + lease => integer() % = 4, 64 bits + }. + +-type 'Etcd.LeaderRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.LeaderResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + kv => 'mvccpb.KeyValue'() % = 2 + }. + +-type 'Etcd.ResignRequest'() :: + #{leader => 'Etcd.LeaderKey'() % = 1 + }. + +-type 'Etcd.ResignResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.ProclaimRequest'() :: + #{leader => 'Etcd.LeaderKey'(), % = 1 + value => iodata() % = 2 + }. + +-type 'Etcd.ProclaimResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 64 bits + negative_int_value => integer(), % = 5, 64 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-type 'mvccpb.KeyValue'() :: + #{key => iodata(), % = 1 + create_revision => integer(), % = 2, 64 bits + mod_revision => integer(), % = 3, 64 bits + version => integer(), % = 4, 64 bits + value => iodata(), % = 5 + lease => integer() % = 6, 64 bits + }. + +-type 'mvccpb.Event'() :: + #{type => 'PUT' | 'DELETE' | integer(), % = 1, enum mvccpb.Event.EventType + kv => 'mvccpb.KeyValue'(), % = 2 + prev_kv => 'mvccpb.KeyValue'() % = 3 + }. + +-type 'authpb.UserAddOptions'() :: + #{no_password => boolean() | 0 | 1 % = 1 + }. + +-type 'authpb.User'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + roles => [iodata()], % = 3 + options => 'authpb.UserAddOptions'() % = 4 + }. + +-type 'authpb.Permission'() :: + #{permType => 'READ' | 'WRITE' | 'READWRITE' | integer(), % = 1, enum authpb.Permission.Type + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'authpb.Role'() :: + #{name => iodata(), % = 1 + keyPermission => ['authpb.Permission'()] % = 2 + }. + +-export_type(['Etcd.ResponseHeader'/0, 'Etcd.RangeRequest'/0, 'Etcd.RangeResponse'/0, 'Etcd.PutRequest'/0, 'Etcd.PutResponse'/0, 'Etcd.DeleteRangeRequest'/0, 'Etcd.DeleteRangeResponse'/0, 'Etcd.RequestOp'/0, 'Etcd.ResponseOp'/0, 'Etcd.Compare'/0, 'Etcd.TxnRequest'/0, 'Etcd.TxnResponse'/0, 'Etcd.CompactionRequest'/0, 'Etcd.CompactionResponse'/0, 'Etcd.HashRequest'/0, 'Etcd.HashKVRequest'/0, 'Etcd.HashKVResponse'/0, 'Etcd.HashResponse'/0, 'Etcd.SnapshotRequest'/0, 'Etcd.SnapshotResponse'/0, 'Etcd.WatchRequest'/0, 'Etcd.WatchCreateRequest'/0, 'Etcd.WatchCancelRequest'/0, 'Etcd.WatchProgressRequest'/0, 'Etcd.WatchResponse'/0, 'Etcd.LeaseGrantRequest'/0, 'Etcd.LeaseGrantResponse'/0, 'Etcd.LeaseRevokeRequest'/0, 'Etcd.LeaseRevokeResponse'/0, 'Etcd.LeaseCheckpoint'/0, 'Etcd.LeaseCheckpointRequest'/0, 'Etcd.LeaseCheckpointResponse'/0, 'Etcd.LeaseKeepAliveRequest'/0, 'Etcd.LeaseKeepAliveResponse'/0, 'Etcd.LeaseTimeToLiveRequest'/0, 'Etcd.LeaseTimeToLiveResponse'/0, 'Etcd.LeaseLeasesRequest'/0, 'Etcd.LeaseStatus'/0, 'Etcd.LeaseLeasesResponse'/0, 'Etcd.Member'/0, 'Etcd.MemberAddRequest'/0, 'Etcd.MemberAddResponse'/0, 'Etcd.MemberRemoveRequest'/0, 'Etcd.MemberRemoveResponse'/0, 'Etcd.MemberUpdateRequest'/0, 'Etcd.MemberUpdateResponse'/0, 'Etcd.MemberListRequest'/0, 'Etcd.MemberListResponse'/0, 'Etcd.MemberPromoteRequest'/0, 'Etcd.MemberPromoteResponse'/0, 'Etcd.DefragmentRequest'/0, 'Etcd.DefragmentResponse'/0, 'Etcd.MoveLeaderRequest'/0, 'Etcd.MoveLeaderResponse'/0, 'Etcd.AlarmRequest'/0, 'Etcd.AlarmMember'/0, 'Etcd.AlarmResponse'/0, 'Etcd.StatusRequest'/0, 'Etcd.StatusResponse'/0, 'Etcd.AuthEnableRequest'/0, 'Etcd.AuthDisableRequest'/0, 'Etcd.AuthenticateRequest'/0, 'Etcd.AuthUserAddRequest'/0, 'Etcd.AuthUserGetRequest'/0, 'Etcd.AuthUserDeleteRequest'/0, 'Etcd.AuthUserChangePasswordRequest'/0, 'Etcd.AuthUserGrantRoleRequest'/0, 'Etcd.AuthUserRevokeRoleRequest'/0, 'Etcd.AuthRoleAddRequest'/0, 'Etcd.AuthRoleGetRequest'/0, 'Etcd.AuthUserListRequest'/0, 'Etcd.AuthRoleListRequest'/0, 'Etcd.AuthRoleDeleteRequest'/0, 'Etcd.AuthRoleGrantPermissionRequest'/0, 'Etcd.AuthRoleRevokePermissionRequest'/0, 'Etcd.AuthEnableResponse'/0, 'Etcd.AuthDisableResponse'/0, 'Etcd.AuthenticateResponse'/0, 'Etcd.AuthUserAddResponse'/0, 'Etcd.AuthUserGetResponse'/0, 'Etcd.AuthUserDeleteResponse'/0, 'Etcd.AuthUserChangePasswordResponse'/0, 'Etcd.AuthUserGrantRoleResponse'/0, 'Etcd.AuthUserRevokeRoleResponse'/0, 'Etcd.AuthRoleAddResponse'/0, 'Etcd.AuthRoleGetResponse'/0, 'Etcd.AuthRoleListResponse'/0, 'Etcd.AuthUserListResponse'/0, 'Etcd.AuthRoleDeleteResponse'/0, 'Etcd.AuthRoleGrantPermissionResponse'/0, 'Etcd.AuthRoleRevokePermissionResponse'/0, 'Etcd.HealthCheckRequest'/0, 'Etcd.HealthCheckResponse'/0, 'Etcd.LockRequest'/0, 'Etcd.LockResponse'/0, 'Etcd.UnlockRequest'/0, 'Etcd.UnlockResponse'/0, 'Etcd.CampaignRequest'/0, 'Etcd.CampaignResponse'/0, 'Etcd.LeaderKey'/0, 'Etcd.LeaderRequest'/0, 'Etcd.LeaderResponse'/0, 'Etcd.ResignRequest'/0, 'Etcd.ResignResponse'/0, 'Etcd.ProclaimRequest'/0, 'Etcd.ProclaimResponse'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0, 'mvccpb.KeyValue'/0, 'mvccpb.Event'/0, 'authpb.UserAddOptions'/0, 'authpb.User'/0, 'authpb.Permission'/0, 'authpb.Role'/0]). + +-spec encode_msg('Etcd.ResponseHeader'() | 'Etcd.RangeRequest'() | 'Etcd.RangeResponse'() | 'Etcd.PutRequest'() | 'Etcd.PutResponse'() | 'Etcd.DeleteRangeRequest'() | 'Etcd.DeleteRangeResponse'() | 'Etcd.RequestOp'() | 'Etcd.ResponseOp'() | 'Etcd.Compare'() | 'Etcd.TxnRequest'() | 'Etcd.TxnResponse'() | 'Etcd.CompactionRequest'() | 'Etcd.CompactionResponse'() | 'Etcd.HashRequest'() | 'Etcd.HashKVRequest'() | 'Etcd.HashKVResponse'() | 'Etcd.HashResponse'() | 'Etcd.SnapshotRequest'() | 'Etcd.SnapshotResponse'() | 'Etcd.WatchRequest'() | 'Etcd.WatchCreateRequest'() | 'Etcd.WatchCancelRequest'() | 'Etcd.WatchProgressRequest'() | 'Etcd.WatchResponse'() | 'Etcd.LeaseGrantRequest'() | 'Etcd.LeaseGrantResponse'() | 'Etcd.LeaseRevokeRequest'() | 'Etcd.LeaseRevokeResponse'() | 'Etcd.LeaseCheckpoint'() | 'Etcd.LeaseCheckpointRequest'() | 'Etcd.LeaseCheckpointResponse'() | 'Etcd.LeaseKeepAliveRequest'() | 'Etcd.LeaseKeepAliveResponse'() | 'Etcd.LeaseTimeToLiveRequest'() | 'Etcd.LeaseTimeToLiveResponse'() | 'Etcd.LeaseLeasesRequest'() | 'Etcd.LeaseStatus'() | 'Etcd.LeaseLeasesResponse'() | 'Etcd.Member'() | 'Etcd.MemberAddRequest'() | 'Etcd.MemberAddResponse'() | 'Etcd.MemberRemoveRequest'() | 'Etcd.MemberRemoveResponse'() | 'Etcd.MemberUpdateRequest'() | 'Etcd.MemberUpdateResponse'() | 'Etcd.MemberListRequest'() | 'Etcd.MemberListResponse'() | 'Etcd.MemberPromoteRequest'() | 'Etcd.MemberPromoteResponse'() | 'Etcd.DefragmentRequest'() | 'Etcd.DefragmentResponse'() | 'Etcd.MoveLeaderRequest'() | 'Etcd.MoveLeaderResponse'() | 'Etcd.AlarmRequest'() | 'Etcd.AlarmMember'() | 'Etcd.AlarmResponse'() | 'Etcd.StatusRequest'() | 'Etcd.StatusResponse'() | 'Etcd.AuthEnableRequest'() | 'Etcd.AuthDisableRequest'() | 'Etcd.AuthenticateRequest'() | 'Etcd.AuthUserAddRequest'() | 'Etcd.AuthUserGetRequest'() | 'Etcd.AuthUserDeleteRequest'() | 'Etcd.AuthUserChangePasswordRequest'() | 'Etcd.AuthUserGrantRoleRequest'() | 'Etcd.AuthUserRevokeRoleRequest'() | 'Etcd.AuthRoleAddRequest'() | 'Etcd.AuthRoleGetRequest'() | 'Etcd.AuthUserListRequest'() | 'Etcd.AuthRoleListRequest'() | 'Etcd.AuthRoleDeleteRequest'() | 'Etcd.AuthRoleGrantPermissionRequest'() | 'Etcd.AuthRoleRevokePermissionRequest'() | 'Etcd.AuthEnableResponse'() | 'Etcd.AuthDisableResponse'() | 'Etcd.AuthenticateResponse'() | 'Etcd.AuthUserAddResponse'() | 'Etcd.AuthUserGetResponse'() | 'Etcd.AuthUserDeleteResponse'() | 'Etcd.AuthUserChangePasswordResponse'() | 'Etcd.AuthUserGrantRoleResponse'() | 'Etcd.AuthUserRevokeRoleResponse'() | 'Etcd.AuthRoleAddResponse'() | 'Etcd.AuthRoleGetResponse'() | 'Etcd.AuthRoleListResponse'() | 'Etcd.AuthUserListResponse'() | 'Etcd.AuthRoleDeleteResponse'() | 'Etcd.AuthRoleGrantPermissionResponse'() | 'Etcd.AuthRoleRevokePermissionResponse'() | 'Etcd.HealthCheckRequest'() | 'Etcd.HealthCheckResponse'() | 'Etcd.LockRequest'() | 'Etcd.LockResponse'() | 'Etcd.UnlockRequest'() | 'Etcd.UnlockResponse'() | 'Etcd.CampaignRequest'() | 'Etcd.CampaignResponse'() | 'Etcd.LeaderKey'() | 'Etcd.LeaderRequest'() | 'Etcd.LeaderResponse'() | 'Etcd.ResignRequest'() | 'Etcd.ResignResponse'() | 'Etcd.ProclaimRequest'() | 'Etcd.ProclaimResponse'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'() | 'mvccpb.KeyValue'() | 'mvccpb.Event'() | 'authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('Etcd.ResponseHeader'() | 'Etcd.RangeRequest'() | 'Etcd.RangeResponse'() | 'Etcd.PutRequest'() | 'Etcd.PutResponse'() | 'Etcd.DeleteRangeRequest'() | 'Etcd.DeleteRangeResponse'() | 'Etcd.RequestOp'() | 'Etcd.ResponseOp'() | 'Etcd.Compare'() | 'Etcd.TxnRequest'() | 'Etcd.TxnResponse'() | 'Etcd.CompactionRequest'() | 'Etcd.CompactionResponse'() | 'Etcd.HashRequest'() | 'Etcd.HashKVRequest'() | 'Etcd.HashKVResponse'() | 'Etcd.HashResponse'() | 'Etcd.SnapshotRequest'() | 'Etcd.SnapshotResponse'() | 'Etcd.WatchRequest'() | 'Etcd.WatchCreateRequest'() | 'Etcd.WatchCancelRequest'() | 'Etcd.WatchProgressRequest'() | 'Etcd.WatchResponse'() | 'Etcd.LeaseGrantRequest'() | 'Etcd.LeaseGrantResponse'() | 'Etcd.LeaseRevokeRequest'() | 'Etcd.LeaseRevokeResponse'() | 'Etcd.LeaseCheckpoint'() | 'Etcd.LeaseCheckpointRequest'() | 'Etcd.LeaseCheckpointResponse'() | 'Etcd.LeaseKeepAliveRequest'() | 'Etcd.LeaseKeepAliveResponse'() | 'Etcd.LeaseTimeToLiveRequest'() | 'Etcd.LeaseTimeToLiveResponse'() | 'Etcd.LeaseLeasesRequest'() | 'Etcd.LeaseStatus'() | 'Etcd.LeaseLeasesResponse'() | 'Etcd.Member'() | 'Etcd.MemberAddRequest'() | 'Etcd.MemberAddResponse'() | 'Etcd.MemberRemoveRequest'() | 'Etcd.MemberRemoveResponse'() | 'Etcd.MemberUpdateRequest'() | 'Etcd.MemberUpdateResponse'() | 'Etcd.MemberListRequest'() | 'Etcd.MemberListResponse'() | 'Etcd.MemberPromoteRequest'() | 'Etcd.MemberPromoteResponse'() | 'Etcd.DefragmentRequest'() | 'Etcd.DefragmentResponse'() | 'Etcd.MoveLeaderRequest'() | 'Etcd.MoveLeaderResponse'() | 'Etcd.AlarmRequest'() | 'Etcd.AlarmMember'() | 'Etcd.AlarmResponse'() | 'Etcd.StatusRequest'() | 'Etcd.StatusResponse'() | 'Etcd.AuthEnableRequest'() | 'Etcd.AuthDisableRequest'() | 'Etcd.AuthenticateRequest'() | 'Etcd.AuthUserAddRequest'() | 'Etcd.AuthUserGetRequest'() | 'Etcd.AuthUserDeleteRequest'() | 'Etcd.AuthUserChangePasswordRequest'() | 'Etcd.AuthUserGrantRoleRequest'() | 'Etcd.AuthUserRevokeRoleRequest'() | 'Etcd.AuthRoleAddRequest'() | 'Etcd.AuthRoleGetRequest'() | 'Etcd.AuthUserListRequest'() | 'Etcd.AuthRoleListRequest'() | 'Etcd.AuthRoleDeleteRequest'() | 'Etcd.AuthRoleGrantPermissionRequest'() | 'Etcd.AuthRoleRevokePermissionRequest'() | 'Etcd.AuthEnableResponse'() | 'Etcd.AuthDisableResponse'() | 'Etcd.AuthenticateResponse'() | 'Etcd.AuthUserAddResponse'() | 'Etcd.AuthUserGetResponse'() | 'Etcd.AuthUserDeleteResponse'() | 'Etcd.AuthUserChangePasswordResponse'() | 'Etcd.AuthUserGrantRoleResponse'() | 'Etcd.AuthUserRevokeRoleResponse'() | 'Etcd.AuthRoleAddResponse'() | 'Etcd.AuthRoleGetResponse'() | 'Etcd.AuthRoleListResponse'() | 'Etcd.AuthUserListResponse'() | 'Etcd.AuthRoleDeleteResponse'() | 'Etcd.AuthRoleGrantPermissionResponse'() | 'Etcd.AuthRoleRevokePermissionResponse'() | 'Etcd.HealthCheckRequest'() | 'Etcd.HealthCheckResponse'() | 'Etcd.LockRequest'() | 'Etcd.LockResponse'() | 'Etcd.UnlockRequest'() | 'Etcd.UnlockResponse'() | 'Etcd.CampaignRequest'() | 'Etcd.CampaignResponse'() | 'Etcd.LeaderKey'() | 'Etcd.LeaderRequest'() | 'Etcd.LeaderResponse'() | 'Etcd.ResignRequest'() | 'Etcd.ResignResponse'() | 'Etcd.ProclaimRequest'() | 'Etcd.ProclaimResponse'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'() | 'mvccpb.KeyValue'() | 'mvccpb.Event'() | 'authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'encode_msg_Etcd.ResponseHeader'(id(Msg, TrUserData), + TrUserData); + 'Etcd.RangeRequest' -> + 'encode_msg_Etcd.RangeRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.RangeResponse' -> + 'encode_msg_Etcd.RangeResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.PutRequest' -> + 'encode_msg_Etcd.PutRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.PutResponse' -> + 'encode_msg_Etcd.PutResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'encode_msg_Etcd.DeleteRangeRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'encode_msg_Etcd.DeleteRangeResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.RequestOp' -> + 'encode_msg_Etcd.RequestOp'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResponseOp' -> + 'encode_msg_Etcd.ResponseOp'(id(Msg, TrUserData), + TrUserData); + 'Etcd.Compare' -> + 'encode_msg_Etcd.Compare'(id(Msg, TrUserData), + TrUserData); + 'Etcd.TxnRequest' -> + 'encode_msg_Etcd.TxnRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.TxnResponse' -> + 'encode_msg_Etcd.TxnResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CompactionRequest' -> + 'encode_msg_Etcd.CompactionRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CompactionResponse' -> + 'encode_msg_Etcd.CompactionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HashRequest' -> + 'encode_msg_Etcd.HashRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashKVRequest' -> + 'encode_msg_Etcd.HashKVRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashKVResponse' -> + 'encode_msg_Etcd.HashKVResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashResponse' -> + 'encode_msg_Etcd.HashResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.SnapshotRequest' -> + 'encode_msg_Etcd.SnapshotRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.SnapshotResponse' -> + 'encode_msg_Etcd.SnapshotResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.WatchRequest' -> + 'encode_msg_Etcd.WatchRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.WatchCreateRequest' -> + 'encode_msg_Etcd.WatchCreateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'encode_msg_Etcd.WatchCancelRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'encode_msg_Etcd.WatchProgressRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchResponse' -> + 'encode_msg_Etcd.WatchResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'encode_msg_Etcd.LeaseGrantRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'encode_msg_Etcd.LeaseGrantResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'encode_msg_Etcd.LeaseRevokeRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'encode_msg_Etcd.LeaseRevokeResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'encode_msg_Etcd.LeaseCheckpoint'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'encode_msg_Etcd.LeaseCheckpointRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'encode_msg_Etcd.LeaseCheckpointResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'encode_msg_Etcd.LeaseKeepAliveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'encode_msg_Etcd.LeaseKeepAliveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'encode_msg_Etcd.LeaseTimeToLiveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'encode_msg_Etcd.LeaseTimeToLiveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'encode_msg_Etcd.LeaseLeasesRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseStatus' -> + 'encode_msg_Etcd.LeaseStatus'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'encode_msg_Etcd.LeaseLeasesResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.Member' -> + 'encode_msg_Etcd.Member'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberAddRequest' -> + 'encode_msg_Etcd.MemberAddRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberAddResponse' -> + 'encode_msg_Etcd.MemberAddResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'encode_msg_Etcd.MemberRemoveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'encode_msg_Etcd.MemberRemoveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'encode_msg_Etcd.MemberUpdateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'encode_msg_Etcd.MemberUpdateResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberListRequest' -> + 'encode_msg_Etcd.MemberListRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberListResponse' -> + 'encode_msg_Etcd.MemberListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'encode_msg_Etcd.MemberPromoteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'encode_msg_Etcd.MemberPromoteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.DefragmentRequest' -> + 'encode_msg_Etcd.DefragmentRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.DefragmentResponse' -> + 'encode_msg_Etcd.DefragmentResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'encode_msg_Etcd.MoveLeaderRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'encode_msg_Etcd.MoveLeaderResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AlarmRequest' -> + 'encode_msg_Etcd.AlarmRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AlarmMember' -> + 'encode_msg_Etcd.AlarmMember'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AlarmResponse' -> + 'encode_msg_Etcd.AlarmResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.StatusRequest' -> + 'encode_msg_Etcd.StatusRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.StatusResponse' -> + 'encode_msg_Etcd.StatusResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AuthEnableRequest' -> + 'encode_msg_Etcd.AuthEnableRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'encode_msg_Etcd.AuthDisableRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'encode_msg_Etcd.AuthenticateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'encode_msg_Etcd.AuthUserAddRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'encode_msg_Etcd.AuthUserGetRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'encode_msg_Etcd.AuthUserDeleteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'encode_msg_Etcd.AuthUserChangePasswordRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'encode_msg_Etcd.AuthUserGrantRoleRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'encode_msg_Etcd.AuthUserRevokeRoleRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'encode_msg_Etcd.AuthRoleAddRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'encode_msg_Etcd.AuthRoleGetRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'encode_msg_Etcd.AuthUserListRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'encode_msg_Etcd.AuthRoleListRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'encode_msg_Etcd.AuthRoleDeleteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthEnableResponse' -> + 'encode_msg_Etcd.AuthEnableResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'encode_msg_Etcd.AuthDisableResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'encode_msg_Etcd.AuthenticateResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'encode_msg_Etcd.AuthUserAddResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'encode_msg_Etcd.AuthUserGetResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'encode_msg_Etcd.AuthUserDeleteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'encode_msg_Etcd.AuthUserChangePasswordResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'encode_msg_Etcd.AuthUserGrantRoleResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'encode_msg_Etcd.AuthUserRevokeRoleResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'encode_msg_Etcd.AuthRoleAddResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'encode_msg_Etcd.AuthRoleGetResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'encode_msg_Etcd.AuthRoleListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'encode_msg_Etcd.AuthUserListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'encode_msg_Etcd.AuthRoleDeleteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HealthCheckRequest' -> + 'encode_msg_Etcd.HealthCheckRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'encode_msg_Etcd.HealthCheckResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LockRequest' -> + 'encode_msg_Etcd.LockRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LockResponse' -> + 'encode_msg_Etcd.LockResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.UnlockRequest' -> + 'encode_msg_Etcd.UnlockRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.UnlockResponse' -> + 'encode_msg_Etcd.UnlockResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CampaignRequest' -> + 'encode_msg_Etcd.CampaignRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CampaignResponse' -> + 'encode_msg_Etcd.CampaignResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderKey' -> + 'encode_msg_Etcd.LeaderKey'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderRequest' -> + 'encode_msg_Etcd.LeaderRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderResponse' -> + 'encode_msg_Etcd.LeaderResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResignRequest' -> + 'encode_msg_Etcd.ResignRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResignResponse' -> + 'encode_msg_Etcd.ResignResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ProclaimRequest' -> + 'encode_msg_Etcd.ProclaimRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ProclaimResponse' -> + 'encode_msg_Etcd.ProclaimResponse'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'mvccpb.KeyValue' -> + 'encode_msg_mvccpb.KeyValue'(id(Msg, TrUserData), + TrUserData); + 'mvccpb.Event' -> + 'encode_msg_mvccpb.Event'(id(Msg, TrUserData), + TrUserData); + 'authpb.UserAddOptions' -> + 'encode_msg_authpb.UserAddOptions'(id(Msg, TrUserData), + TrUserData); + 'authpb.User' -> + 'encode_msg_authpb.User'(id(Msg, TrUserData), + TrUserData); + 'authpb.Permission' -> + 'encode_msg_authpb.Permission'(id(Msg, TrUserData), + TrUserData); + 'authpb.Role' -> + 'encode_msg_authpb.Role'(id(Msg, TrUserData), + TrUserData) + end. + + +'encode_msg_Etcd.ResponseHeader'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResponseHeader'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{cluster_id := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{member_id := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{raft_term := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.RangeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.RangeRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RangeRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{limit := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{revision := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{sort_order := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 'NONE'; TrF5 =:= 0 -> B4; + true -> + 'e_enum_Etcd.RangeRequest.SortOrder'(TrF5, + <>, + TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{sort_target := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 'KEY'; TrF6 =:= 0 -> B5; + true -> + 'e_enum_Etcd.RangeRequest.SortTarget'(TrF6, + <>, + TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{serializable := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= false -> B6; + true -> e_type_bool(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + B8 = case M of + #{keys_only := F8} -> + begin + TrF8 = id(F8, TrUserData), + if TrF8 =:= false -> B7; + true -> e_type_bool(TrF8, <>, TrUserData) + end + end; + _ -> B7 + end, + B9 = case M of + #{count_only := F9} -> + begin + TrF9 = id(F9, TrUserData), + if TrF9 =:= false -> B8; + true -> e_type_bool(TrF9, <>, TrUserData) + end + end; + _ -> B8 + end, + B10 = case M of + #{min_mod_revision := F10} -> + begin + TrF10 = id(F10, TrUserData), + if TrF10 =:= 0 -> B9; + true -> + e_type_int64(TrF10, <>, TrUserData) + end + end; + _ -> B9 + end, + B11 = case M of + #{max_mod_revision := F11} -> + begin + TrF11 = id(F11, TrUserData), + if TrF11 =:= 0 -> B10; + true -> + e_type_int64(TrF11, <>, TrUserData) + end + end; + _ -> B10 + end, + B12 = case M of + #{min_create_revision := F12} -> + begin + TrF12 = id(F12, TrUserData), + if TrF12 =:= 0 -> B11; + true -> + e_type_int64(TrF12, <>, TrUserData) + end + end; + _ -> B11 + end, + case M of + #{max_create_revision := F13} -> + begin + TrF13 = id(F13, TrUserData), + if TrF13 =:= 0 -> B12; + true -> + e_type_int64(TrF13, <>, TrUserData) + end + end; + _ -> B12 + end. + +'encode_msg_Etcd.RangeResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.RangeResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RangeResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.RangeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kvs := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.RangeResponse_kvs'(TrF2, B1, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{more := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{count := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.PutRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.PutRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.PutRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{lease := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{prev_kv := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{ignore_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= false -> B4; + true -> e_type_bool(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{ignore_lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= false -> B5; + true -> e_type_bool(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_Etcd.PutResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.PutResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.PutResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.PutResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{prev_kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.PutResponse_prev_kv'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.DeleteRangeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.DeleteRangeRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DeleteRangeRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.DeleteRangeResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.DeleteRangeResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DeleteRangeResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.DeleteRangeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{deleted := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kvs := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.DeleteRangeResponse_prev_kvs'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.RequestOp'(Msg, TrUserData) -> + 'encode_msg_Etcd.RequestOp'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RequestOp'(#{} = M, Bin, TrUserData) -> + case M of + #{request := F1} -> + case id(F1, TrUserData) of + {request_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_range'(TrTF1, + <>, + TrUserData) + end; + {request_put, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_put'(TrTF1, + <>, + TrUserData) + end; + {request_delete_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_delete_range'(TrTF1, + <>, + TrUserData) + end; + {request_txn, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_txn'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ResponseOp'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResponseOp'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResponseOp'(#{} = M, Bin, + TrUserData) -> + case M of + #{response := F1} -> + case id(F1, TrUserData) of + {response_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_range'(TrTF1, + <>, + TrUserData) + end; + {response_put, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_put'(TrTF1, + <>, + TrUserData) + end; + {response_delete_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_delete_range'(TrTF1, + <>, + TrUserData) + end; + {response_txn, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_txn'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.Compare'(Msg, TrUserData) -> + 'encode_msg_Etcd.Compare'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.Compare'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{result := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'EQUAL'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.Compare.CompareResult'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{target := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 'VERSION'; TrF2 =:= 0 -> B1; + true -> + 'e_enum_Etcd.Compare.CompareTarget'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{key := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{target_union := F4} -> + case id(F4, TrUserData) of + {version, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {create_revision, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {mod_revision, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {value, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_bytes(TrTF4, <>, TrUserData) + end; + {lease, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end + end; + _ -> B3 + end, + case M of + #{range_end := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> + e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end. + +'encode_msg_Etcd.TxnRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.TxnRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.TxnRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{compare := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.TxnRequest_compare'(TrF1, Bin, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{success := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.TxnRequest_success'(TrF2, B1, TrUserData) + end; + _ -> B1 + end, + case M of + #{failure := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.TxnRequest_failure'(TrF3, B2, TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.TxnResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.TxnResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.TxnResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.TxnResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{succeeded := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{responses := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.TxnResponse_responses'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.CompactionRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.CompactionRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CompactionRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{revision := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{physical := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.CompactionResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.CompactionResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CompactionResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.CompactionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HashRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.HashKVRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashKVRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashKVRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{revision := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HashKVResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashKVResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashKVResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.HashKVResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{hash := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{compact_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.HashResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.HashResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{hash := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.SnapshotRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.SnapshotResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.SnapshotResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.SnapshotResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.SnapshotResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{remaining_bytes := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{blob := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.WatchRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.WatchRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{request_union := F1} -> + case id(F1, TrUserData) of + {create_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_create_request'(TrTF1, + <>, + TrUserData) + end; + {cancel_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_cancel_request'(TrTF1, + <>, + TrUserData) + end; + {progress_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_progress_request'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.WatchCreateRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchCreateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.WatchCreateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{start_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{progress_notify := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{filters := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_Etcd.WatchCreateRequest_filters'(TrF5, B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{prev_kv := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= false -> B5; + true -> e_type_bool(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{watch_id := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= 0 -> B6; + true -> + e_type_int64(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + case M of + #{fragment := F8} -> + begin + TrF8 = id(F8, TrUserData), + if TrF8 =:= false -> B7; + true -> e_type_bool(TrF8, <>, TrUserData) + end + end; + _ -> B7 + end. + +'encode_msg_Etcd.WatchCancelRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchCancelRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.WatchCancelRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{watch_id := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.WatchProgressRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.WatchResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.WatchResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.WatchResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{watch_id := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{created := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{canceled := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{compact_revision := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 0 -> B4; + true -> + e_type_int64(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{cancel_reason := F6} -> + begin + TrF6 = id(F6, TrUserData), + case is_empty_string(TrF6) of + true -> B5; + false -> + e_type_string(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{fragment := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= false -> B6; + true -> e_type_bool(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + case M of + #{events := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_Etcd.WatchResponse_events'(TrF8, B7, + TrUserData) + end; + _ -> B7 + end. + +'encode_msg_Etcd.LeaseGrantRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseGrantRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseGrantRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'TTL' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseGrantResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseGrantResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseGrantResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseGrantResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{error := F4} -> + begin + TrF4 = id(F4, TrUserData), + case is_empty_string(TrF4) of + true -> B3; + false -> + e_type_string(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.LeaseRevokeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseRevokeRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseRevokeRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseRevokeResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseRevokeResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseRevokeResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseRevokeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseCheckpoint'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpoint'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpoint'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{remaining_TTL := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseCheckpointRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpointRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpointRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{checkpoints := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.LeaseCheckpointRequest_checkpoints'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseCheckpointResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpointResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpointResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseCheckpointResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseKeepAliveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseKeepAliveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseKeepAliveRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseKeepAliveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseKeepAliveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseKeepAliveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseKeepAliveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.LeaseTimeToLiveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseTimeToLiveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseTimeToLiveRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keys := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseTimeToLiveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseTimeToLiveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseTimeToLiveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseTimeToLiveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{grantedTTL := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + case M of + #{keys := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_Etcd.LeaseTimeToLiveResponse_keys'(TrF5, B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_Etcd.LeaseLeasesRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.LeaseStatus'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseStatus'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaseStatus'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseLeasesResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseLeasesResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseLeasesResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseLeasesResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{leases := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.LeaseLeasesResponse_leases'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.Member'(Msg, TrUserData) -> + 'encode_msg_Etcd.Member'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.Member'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{name := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{peerURLs := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.Member_peerURLs'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{clientURLs := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_Etcd.Member_clientURLs'(TrF4, B3, TrUserData) + end; + _ -> B3 + end, + case M of + #{isLearner := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= false -> B4; + true -> e_type_bool(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end. + +'encode_msg_Etcd.MemberAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberAddRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{peerURLs := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.MemberAddRequest_peerURLs'(TrF1, Bin, + TrUserData) + end; + _ -> Bin + end, + case M of + #{isLearner := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberAddResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberAddResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{member := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.MemberAddResponse_member'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{members := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.MemberAddResponse_members'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.MemberRemoveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberRemoveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberRemoveRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MemberRemoveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberRemoveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberRemoveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberRemoveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberRemoveResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberUpdateRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberUpdateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberUpdateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{peerURLs := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberUpdateRequest_peerURLs'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberUpdateResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberUpdateResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberUpdateResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberUpdateResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberUpdateResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.MemberListResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberListResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberPromoteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberPromoteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberPromoteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MemberPromoteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberPromoteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberPromoteResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberPromoteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberPromoteResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.DefragmentRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.DefragmentResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.DefragmentResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DefragmentResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.DefragmentResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MoveLeaderRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.MoveLeaderRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MoveLeaderRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{targetID := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MoveLeaderResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MoveLeaderResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MoveLeaderResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MoveLeaderResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AlarmRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{action := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'GET'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.AlarmRequest.AlarmAction'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{memberID := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{alarm := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 'NONE'; TrF3 =:= 0 -> B2; + true -> + 'e_enum_Etcd.AlarmType'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AlarmMember'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmMember'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmMember'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{memberID := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{alarm := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 'NONE'; TrF2 =:= 0 -> B1; + true -> + 'e_enum_Etcd.AlarmType'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AlarmResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AlarmResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{alarms := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AlarmResponse_alarms'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.StatusRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.StatusResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.StatusResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.StatusResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.StatusResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{version := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{dbSize := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{leader := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{raftIndex := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 0 -> B4; + true -> e_varint(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{raftTerm := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> e_varint(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{raftAppliedIndex := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= 0 -> B6; + true -> e_varint(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + B8 = case M of + #{errors := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_Etcd.StatusResponse_errors'(TrF8, B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{dbSizeInUse := F9} -> + begin + TrF9 = id(F9, TrUserData), + if TrF9 =:= 0 -> B8; + true -> + e_type_int64(TrF9, <>, TrUserData) + end + end; + _ -> B8 + end, + case M of + #{isLearner := F10} -> + begin + TrF10 = id(F10, TrUserData), + if TrF10 =:= false -> B9; + true -> + e_type_bool(TrF10, <>, TrUserData) + end + end; + _ -> B9 + end. + +'encode_msg_Etcd.AuthEnableRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthDisableRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthenticateRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthenticateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthenticateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthUserAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserAddRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_Etcd.AuthUserAddRequest_options'(TrF3, + <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AuthUserGetRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthUserGetRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGetRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserDeleteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserDeleteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserDeleteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthUserChangePasswordRequest'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserGrantRoleRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGrantRoleRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGrantRoleRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{user := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{role := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserRevokeRoleRequest'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{role := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthRoleAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleAddRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGetRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthRoleGetRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleGetRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthRoleListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthRoleDeleteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleDeleteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleDeleteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{perm := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.AuthRoleGrantPermissionRequest_perm'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AuthEnableResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthEnableResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthEnableResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthEnableResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthDisableResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthDisableResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthDisableResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthDisableResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthenticateResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthenticateResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthenticateResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthenticateResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{token := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserAddResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserAddResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserGetResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGetResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGetResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserGetResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{roles := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthUserGetResponse_roles'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserDeleteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserDeleteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserDeleteResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserDeleteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthUserChangePasswordResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserChangePasswordResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserGrantRoleResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGrantRoleResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGrantRoleResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserGrantRoleResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserRevokeRoleResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserRevokeRoleResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleAddResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleAddResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGetResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGetResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleGetResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleGetResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{perm := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthRoleGetResponse_perm'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleListResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{roles := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthRoleListResponse_roles'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserListResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{users := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthUserListResponse_users'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleDeleteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleDeleteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleDeleteResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleDeleteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleGrantPermissionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleRevokePermissionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HealthCheckRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.HealthCheckRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.HealthCheckRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{service := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HealthCheckResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.HealthCheckResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.HealthCheckResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{status := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'UNKNOWN'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.HealthCheckResponse.ServingStatus'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LockRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LockRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LockRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{lease := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LockResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LockResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LockResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LockResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.UnlockRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.UnlockRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.UnlockRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.UnlockResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.UnlockResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.UnlockResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.UnlockResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.CampaignRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.CampaignRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CampaignRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{lease := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{value := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.CampaignResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.CampaignResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CampaignResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.CampaignResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{leader := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.CampaignResponse_leader'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaderKey'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderKey'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{rev := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{lease := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.LeaderRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaderResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaderResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.LeaderResponse_kv'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.ResignRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResignRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResignRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{leader := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ResignRequest_leader'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ResignResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResignResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResignResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ResignResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ProclaimRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.ProclaimRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.ProclaimRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{leader := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ProclaimRequest_leader'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{value := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.ProclaimResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.ProclaimResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.ProclaimResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ProclaimResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_mvccpb.KeyValue'(Msg, TrUserData) -> + 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.KeyValue'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{create_revision := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{mod_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{version := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{value := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> + e_type_int64(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_mvccpb.Event'(Msg, TrUserData) -> + 'encode_msg_mvccpb.Event'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.Event'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{type := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'PUT'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_mvccpb.Event.EventType'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_mvccpb.Event_kv'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_mvccpb.Event_prev_kv'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.UserAddOptions'(Msg, TrUserData) -> + 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_authpb.UserAddOptions'(#{} = M, Bin, + TrUserData) -> + case M of + #{no_password := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_authpb.User'(Msg, TrUserData) -> + 'encode_msg_authpb.User'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.User'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{roles := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_authpb.User_roles'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= undefined -> B3; + true -> + 'e_mfield_authpb.User_options'(TrF4, <>, + TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_authpb.Permission'(Msg, TrUserData) -> + 'encode_msg_authpb.Permission'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Permission'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{permType := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'READ'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_authpb.Permission.Type'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.Role'(Msg, TrUserData) -> + 'encode_msg_authpb.Role'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Role'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keyPermission := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_authpb.Role_keyPermission'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'e_mfield_Etcd.RangeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RangeResponse_kvs'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.RangeResponse_kvs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.RangeResponse_kvs'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.RangeResponse_kvs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.RangeResponse_kvs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.PutResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.PutResponse_prev_kv'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.DeleteRangeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.DeleteRangeResponse_prev_kvs'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.DeleteRangeResponse_prev_kvs'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.DeleteRangeResponse_prev_kvs'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.DeleteRangeResponse_prev_kvs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.RequestOp_request_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RangeRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_put'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.PutRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_delete_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.DeleteRangeRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_txn'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.TxnRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RangeResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_put'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.PutResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_delete_range'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.DeleteRangeResponse'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_txn'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.TxnResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.TxnRequest_compare'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Compare'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_compare'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_compare'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_compare'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_compare'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnRequest_success'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RequestOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_success'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_success'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_success'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_success'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnRequest_failure'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RequestOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_failure'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_failure'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_failure'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_failure'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.TxnResponse_responses'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnResponse_responses'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnResponse_responses'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnResponse_responses'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnResponse_responses'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.CompactionResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.HashKVResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.HashResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.SnapshotResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_create_request'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.WatchCreateRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_cancel_request'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.WatchCancelRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_progress_request'(_Msg, Bin, + _TrUserData) -> + <>. + +'e_field_Etcd.WatchCreateRequest_filters'(Elems, Bin, + TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_Etcd.WatchCreateRequest_filters'(Elems, <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_Etcd.WatchCreateRequest_filters'([], Bin, + _TrUserData) -> + Bin. + +'e_pfield_Etcd.WatchCreateRequest_filters'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = + 'e_enum_Etcd.WatchCreateRequest.FilterType'(id(Value, + TrUserData), + Bin, TrUserData), + 'e_pfield_Etcd.WatchCreateRequest_filters'(Rest, Bin2, + TrUserData); +'e_pfield_Etcd.WatchCreateRequest_filters'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.WatchResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchResponse_events'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.Event'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.WatchResponse_events'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.WatchResponse_events'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.WatchResponse_events'(Rest, Bin3, + TrUserData); +'e_field_Etcd.WatchResponse_events'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseGrantResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseRevokeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseCheckpointRequest_checkpoints'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaseCheckpoint'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseCheckpointRequest_checkpoints'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.LeaseCheckpointRequest_checkpoints'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + Bin3, TrUserData); +'e_field_Etcd.LeaseCheckpointRequest_checkpoints'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseCheckpointResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseKeepAliveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseTimeToLiveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseTimeToLiveResponse_keys'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, Bin3, + TrUserData); +'e_field_Etcd.LeaseTimeToLiveResponse_keys'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseLeasesResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseLeasesResponse_leases'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaseStatus'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseLeasesResponse_leases'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.LeaseLeasesResponse_leases'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.LeaseLeasesResponse_leases'(Rest, Bin3, + TrUserData); +'e_field_Etcd.LeaseLeasesResponse_leases'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.Member_peerURLs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.Member_peerURLs'(Rest, Bin3, TrUserData); +'e_field_Etcd.Member_peerURLs'([], Bin, _TrUserData) -> + Bin. + +'e_field_Etcd.Member_clientURLs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.Member_clientURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.Member_clientURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.MemberAddRequest_peerURLs'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.MemberAddRequest_peerURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberAddRequest_peerURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberAddResponse_member'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberAddResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberAddResponse_members'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberAddResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberAddResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberAddResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberRemoveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberRemoveResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberRemoveResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberRemoveResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberRemoveResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberRemoveResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.MemberUpdateRequest_peerURLs'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberUpdateRequest_peerURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberUpdateResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberUpdateResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberUpdateResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberUpdateResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberUpdateResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberUpdateResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberListResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberListResponse_members'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberListResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberListResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberListResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberPromoteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberPromoteResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberPromoteResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberPromoteResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberPromoteResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberPromoteResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.DefragmentResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MoveLeaderResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AlarmResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AlarmResponse_alarms'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.AlarmMember'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AlarmResponse_alarms'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.AlarmResponse_alarms'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.AlarmResponse_alarms'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AlarmResponse_alarms'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.StatusResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.StatusResponse_errors'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.StatusResponse_errors'(Rest, Bin3, + TrUserData); +'e_field_Etcd.StatusResponse_errors'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserAddRequest_options'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGrantPermissionRequest_perm'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthEnableResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthDisableResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthenticateResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserGetResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthUserGetResponse_roles'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthUserGetResponse_roles'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthUserGetResponse_roles'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserDeleteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserChangePasswordResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserGrantRoleResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserRevokeRoleResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGetResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGetResponse_perm'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthRoleGetResponse_perm'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.AuthRoleGetResponse_perm'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.AuthRoleGetResponse_perm'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthRoleGetResponse_perm'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthRoleListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthRoleListResponse_roles'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthRoleListResponse_roles'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthRoleListResponse_roles'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthUserListResponse_users'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthUserListResponse_users'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthUserListResponse_users'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthRoleDeleteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGrantPermissionResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleRevokePermissionResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LockResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.UnlockResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.CampaignResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.CampaignResponse_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaderResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaderResponse_kv'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResignRequest_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResignResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ProclaimRequest_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ProclaimResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_mvccpb.Event_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_mvccpb.Event_prev_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.User_roles'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_authpb.User_roles'(Rest, Bin3, TrUserData); +'e_field_authpb.User_roles'([], Bin, _TrUserData) -> + Bin. + +'e_mfield_authpb.User_options'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_authpb.Role_keyPermission'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.Role_keyPermission'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_authpb.Role_keyPermission'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_authpb.Role_keyPermission'(Rest, Bin3, + TrUserData); +'e_field_authpb.Role_keyPermission'([], Bin, + _TrUserData) -> + Bin. + +'e_enum_Etcd.RangeRequest.SortOrder'('NONE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'('ASCEND', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'('DESCEND', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.RangeRequest.SortTarget'('KEY', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('VERSION', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('CREATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('MOD', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('VALUE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.Compare.CompareResult'('EQUAL', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('GREATER', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('LESS', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('NOT_EQUAL', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.Compare.CompareTarget'('VERSION', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('CREATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('MOD', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('VALUE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('LEASE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.WatchCreateRequest.FilterType'('NOPUT', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.WatchCreateRequest.FilterType'('NODELETE', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.WatchCreateRequest.FilterType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.AlarmType'('NONE', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'('NOSPACE', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'('CORRUPT', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.AlarmRequest.AlarmAction'('GET', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'('ACTIVATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_mvccpb.Event.EventType'('PUT', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'('DELETE', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_authpb.Permission.Type'('READ', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('WRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('READWRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> + not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) + when is_binary(B), byte_size(B) =/= 0 -> + true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('Etcd.ResponseHeader', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResponseHeader'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RangeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.RangeRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RangeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.RangeResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.PutRequest', Bin, TrUserData) -> + id('decode_msg_Etcd.PutRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.PutResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.PutResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DeleteRangeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.DeleteRangeRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DeleteRangeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.DeleteRangeResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RequestOp', Bin, TrUserData) -> + id('decode_msg_Etcd.RequestOp'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResponseOp', Bin, TrUserData) -> + id('decode_msg_Etcd.ResponseOp'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.Compare', Bin, TrUserData) -> + id('decode_msg_Etcd.Compare'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.TxnRequest', Bin, TrUserData) -> + id('decode_msg_Etcd.TxnRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.TxnResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.TxnResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CompactionRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.CompactionRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CompactionResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.CompactionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashKVRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashKVRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashKVResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashKVResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.SnapshotRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.SnapshotRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.SnapshotResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.SnapshotResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchCreateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchCreateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchCancelRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchCancelRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchProgressRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchProgressRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseGrantRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseGrantRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseGrantResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseGrantResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseRevokeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseRevokeRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseRevokeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseRevokeResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpoint', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpoint'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpointRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpointRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpointResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpointResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseKeepAliveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseKeepAliveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseKeepAliveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseKeepAliveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseTimeToLiveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseTimeToLiveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseTimeToLiveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseTimeToLiveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseLeasesRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseLeasesRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseStatus', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseStatus'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseLeasesResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseLeasesResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.Member', Bin, TrUserData) -> + id('decode_msg_Etcd.Member'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberAddRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberAddResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberRemoveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberRemoveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberRemoveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberRemoveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberUpdateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberUpdateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberUpdateResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberUpdateResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberListRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberPromoteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberPromoteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberPromoteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberPromoteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DefragmentRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.DefragmentRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DefragmentResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.DefragmentResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MoveLeaderRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MoveLeaderRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MoveLeaderResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MoveLeaderResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmMember', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmMember'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.StatusRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.StatusRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.StatusResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.StatusResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthEnableRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthEnableRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthDisableRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthDisableRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthenticateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthenticateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserAddRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGetRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGetRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserDeleteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserDeleteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserChangePasswordRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserChangePasswordRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGrantRoleRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGrantRoleRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserRevokeRoleRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserRevokeRoleRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleAddRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGetRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleGetRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserListRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleListRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleDeleteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleDeleteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGrantPermissionRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleGrantPermissionRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleRevokePermissionRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleRevokePermissionRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthEnableResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthEnableResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthDisableResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthDisableResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthenticateResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthenticateResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserAddResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGetResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGetResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserDeleteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserDeleteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserChangePasswordResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserChangePasswordResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGrantRoleResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGrantRoleResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserRevokeRoleResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserRevokeRoleResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleAddResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGetResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleGetResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleDeleteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleDeleteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGrantPermissionResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleGrantPermissionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleRevokePermissionResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleRevokePermissionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HealthCheckRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HealthCheckRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HealthCheckResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HealthCheckResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LockRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LockRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LockResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LockResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.UnlockRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.UnlockRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.UnlockResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.UnlockResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CampaignRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.CampaignRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CampaignResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.CampaignResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderKey', Bin, TrUserData) -> + id('decode_msg_Etcd.LeaderKey'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaderRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaderResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResignRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResignRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResignResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResignResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ProclaimRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.ProclaimRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ProclaimResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.ProclaimResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.KeyValue', Bin, TrUserData) -> + id('decode_msg_mvccpb.KeyValue'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.Event', Bin, TrUserData) -> + id('decode_msg_mvccpb.Event'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.UserAddOptions', Bin, + TrUserData) -> + id('decode_msg_authpb.UserAddOptions'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.User', Bin, TrUserData) -> + id('decode_msg_authpb.User'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Permission', Bin, + TrUserData) -> + id('decode_msg_authpb.Permission'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Role', Bin, TrUserData) -> + id('decode_msg_authpb.Role'(Bin, TrUserData), + TrUserData). + + + +'decode_msg_Etcd.ResponseHeader'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ResponseHeader'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + #{cluster_id => F@_1, member_id => F@_2, + revision => F@_3, raft_term => F@_4}; +'dfp_read_field_def_Etcd.ResponseHeader'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.ResponseHeader'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.ResponseHeader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResponseHeader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.ResponseHeader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 16 -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 24 -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResponseHeader'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, TrUserData); + 3 -> + 'skip_group_Etcd.ResponseHeader'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.ResponseHeader'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + #{cluster_id => F@_1, member_id => F@_2, + revision => F@_3, raft_term => F@_4}. + +'d_field_Etcd.ResponseHeader_cluster_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_cluster_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_member_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_member_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_raft_term'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_raft_term'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.ResponseHeader'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.ResponseHeader'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.ResponseHeader'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_length_delimited_Etcd.ResponseHeader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResponseHeader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.ResponseHeader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_group_Etcd.ResponseHeader'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_32_Etcd.ResponseHeader'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_64_Etcd.ResponseHeader'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'decode_msg_Etcd.RangeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id('NONE', TrUserData), + id('KEY', TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.RangeRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_limit'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_revision'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<96, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<104, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, _) -> + #{key => F@_1, range_end => F@_2, limit => F@_3, + revision => F@_4, sort_order => F@_5, + sort_target => F@_6, serializable => F@_7, + keys_only => F@_8, count_only => F@_9, + min_mod_revision => F@_10, max_mod_revision => F@_11, + min_create_revision => F@_12, + max_create_revision => F@_13}; +'dfp_read_field_def_Etcd.RangeRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'dg_read_field_def_Etcd.RangeRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData). + +'dg_read_field_def_Etcd.RangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'dg_read_field_def_Etcd.RangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RangeRequest_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); + 18 -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 24 -> + 'd_field_Etcd.RangeRequest_limit'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); + 32 -> + 'd_field_Etcd.RangeRequest_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 40 -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 48 -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + TrUserData); + 56 -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); + 64 -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 72 -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 80 -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + TrUserData); + 88 -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + TrUserData); + 96 -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + 104 -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); + 1 -> + 'skip_64_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RangeRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + 3 -> + 'skip_group_Etcd.RangeRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 5 -> + 'skip_32_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + end + end; +'dg_read_field_def_Etcd.RangeRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, _) -> + #{key => F@_1, range_end => F@_2, limit => F@_3, + revision => F@_4, sort_order => F@_5, + sort_target => F@_6, serializable => F@_7, + keys_only => F@_8, count_only => F@_9, + min_mod_revision => F@_10, max_mod_revision => F@_11, + min_create_revision => F@_12, + max_create_revision => F@_13}. + +'d_field_Etcd.RangeRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'d_field_Etcd.RangeRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_limit'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_limit'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_limit'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_sort_order'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_sort_order'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.RangeRequest.SortOrder'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_sort_target'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_sort_target'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.RangeRequest.SortTarget'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_serializable'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_serializable'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_keys_only'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_keys_only'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, NewFValue, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_count_only'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_count_only'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, NewFValue, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_min_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_min_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, _, + F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, NewFValue, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_max_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_max_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, NewFValue, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_min_create_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_min_create_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_max_create_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_max_create_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, TrUserData). + +'skip_varint_Etcd.RangeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'skip_varint_Etcd.RangeRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'skip_varint_Etcd.RangeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_length_delimited_Etcd.RangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'skip_length_delimited_Etcd.RangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RangeRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_group_Etcd.RangeRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_32_Etcd.RangeRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_64_Etcd.RangeRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'decode_msg_Etcd.RangeResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + id(false, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.RangeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_more'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_count'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<>>, 0, 0, + F@_1, R1, F@_3, F@_4, TrUserData) -> + S1 = #{more => F@_3, count => F@_4}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{kvs => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.RangeResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.RangeResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.RangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RangeResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.RangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RangeResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 18 -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.RangeResponse_more'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.RangeResponse_count'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RangeResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, TrUserData); + 3 -> + 'skip_group_Etcd.RangeResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.RangeResponse'(<<>>, 0, 0, F@_1, + R1, F@_3, F@_4, TrUserData) -> + S1 = #{more => F@_3, count => F@_4}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{kvs => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.RangeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_Etcd.RangeResponse_kvs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_kvs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, + cons(NewFValue, Prev, TrUserData), + F@_3, F@_4, TrUserData). + +'d_field_Etcd.RangeResponse_more'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_more'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_more'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.RangeResponse_count'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_count'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_count'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.RangeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.RangeResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.RangeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_Etcd.RangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RangeResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.RangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RangeResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_group_Etcd.RangeResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_32_Etcd.RangeResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_64_Etcd.RangeResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_Etcd.PutRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.PutRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, value => F@_2, lease => F@_3, + prev_kv => F@_4, ignore_value => F@_5, + ignore_lease => F@_6}; +'dfp_read_field_def_Etcd.PutRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_Etcd.PutRequest'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_Etcd.PutRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.PutRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_Etcd.PutRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.PutRequest_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 18 -> + 'd_field_Etcd.PutRequest_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 24 -> + 'd_field_Etcd.PutRequest_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 32 -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 40 -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 48 -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.PutRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_Etcd.PutRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_Etcd.PutRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, value => F@_2, lease => F@_3, + prev_kv => F@_4, ignore_value => F@_5, + ignore_lease => F@_6}. + +'d_field_Etcd.PutRequest_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_Etcd.PutRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_ignore_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_ignore_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_ignore_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_ignore_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_Etcd.PutRequest'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_Etcd.PutRequest'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_Etcd.PutRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.PutRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_Etcd.PutRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.PutRequest'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_Etcd.PutRequest'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.PutRequest'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_Etcd.PutRequest'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_Etcd.PutRequest'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_Etcd.PutResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.PutResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.PutResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.PutResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.PutResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{prev_kv => F@_2} + end; +'dfp_read_field_def_Etcd.PutResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.PutResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.PutResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.PutResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.PutResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.PutResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.PutResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.PutResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.PutResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{prev_kv => F@_2} + end. + +'d_field_Etcd.PutResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.PutResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.PutResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.PutResponse_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.PutResponse_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.PutResponse'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.PutResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.PutResponse'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.PutResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.PutResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.PutResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.PutResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.PutResponse'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.PutResponse'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.PutResponse'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.PutResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.PutResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.DeleteRangeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{key => F@_1, range_end => F@_2, prev_kv => F@_3}; +'dfp_read_field_def_Etcd.DeleteRangeRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.DeleteRangeRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DeleteRangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 24 -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DeleteRangeRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.DeleteRangeRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{key => F@_1, range_end => F@_2, prev_kv => F@_3}. + +'d_field_Etcd.DeleteRangeRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.DeleteRangeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.DeleteRangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.DeleteRangeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.DeleteRangeRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DeleteRangeRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.DeleteRangeRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.DeleteRangeRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.DeleteRangeRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.DeleteRangeRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.DeleteRangeResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<>>, 0, + 0, F@_1, F@_2, R1, TrUserData) -> + S1 = #{deleted => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{prev_kvs => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.DeleteRangeResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.DeleteRangeResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DeleteRangeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DeleteRangeResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.DeleteRangeResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{deleted => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{prev_kvs => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.DeleteRangeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.DeleteRangeResponse_deleted'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_deleted'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeResponse_prev_kvs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_prev_kvs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.DeleteRangeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.DeleteRangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.DeleteRangeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.DeleteRangeResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DeleteRangeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.DeleteRangeResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.DeleteRangeResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.DeleteRangeResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.DeleteRangeResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.RequestOp'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Bin, 0, 0, + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.RequestOp'(<<10, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_range'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<18, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_put'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<26, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<34, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request => F@_1} + end; +'dfp_read_field_def_Etcd.RequestOp'(Other, Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.RequestOp'(Other, Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.RequestOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RequestOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.RequestOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RequestOp_request_range'(Rest, 0, 0, F@_1, + TrUserData); + 18 -> + 'd_field_Etcd.RequestOp_request_put'(Rest, 0, 0, F@_1, + TrUserData); + 26 -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, 0, + 0, F@_1, TrUserData); + 34 -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RequestOp'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.RequestOp'(Rest, 0, 0, F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RequestOp'(Rest, 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.RequestOp'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.RequestOp'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.RequestOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request => F@_1} + end. + +'d_field_Etcd.RequestOp_request_range'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_range'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_range'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RangeRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_range, NewFValue}, + TrUserData); + {request_range, MVPrev} -> + id({request_range, + 'merge_msg_Etcd.RangeRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_range, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_put'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_put'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_put'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.PutRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_put, NewFValue}, + TrUserData); + {request_put, MVPrev} -> + id({request_put, + 'merge_msg_Etcd.PutRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_put, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_delete_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.RequestOp_request_delete_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.DeleteRangeRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_delete_range, + NewFValue}, + TrUserData); + {request_delete_range, MVPrev} -> + id({request_delete_range, + 'merge_msg_Etcd.DeleteRangeRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_delete_range, + NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_txn'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_txn'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.TxnRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_txn, NewFValue}, + TrUserData); + {request_txn, MVPrev} -> + id({request_txn, + 'merge_msg_Etcd.TxnRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_txn, NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.RequestOp'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.RequestOp'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.RequestOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RequestOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.RequestOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RequestOp'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.RequestOp'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RequestOp'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.RequestOp'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.RequestOp'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.ResponseOp'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Bin, 0, 0, + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ResponseOp'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{response => F@_1} + end; +'dfp_read_field_def_Etcd.ResponseOp'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResponseOp'(Other, Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.ResponseOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResponseOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResponseOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, 0, 0, + F@_1, TrUserData); + 18 -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, 0, 0, F@_1, + TrUserData); + 26 -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, 0, + 0, F@_1, TrUserData); + 34 -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResponseOp'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResponseOp'(Rest, 0, 0, F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResponseOp'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResponseOp'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.ResponseOp'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.ResponseOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{response => F@_1} + end. + +'d_field_Etcd.ResponseOp_response_range'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_range'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RangeResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_range, NewFValue}, + TrUserData); + {response_range, MVPrev} -> + id({response_range, + 'merge_msg_Etcd.RangeResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_range, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_put'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_put'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.PutResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_put, NewFValue}, + TrUserData); + {response_put, MVPrev} -> + id({response_put, + 'merge_msg_Etcd.PutResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_put, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_delete_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.ResponseOp_response_delete_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.DeleteRangeResponse'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_delete_range, + NewFValue}, + TrUserData); + {response_delete_range, MVPrev} -> + id({response_delete_range, + 'merge_msg_Etcd.DeleteRangeResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_delete_range, + NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_txn'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_txn'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.TxnResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_txn, NewFValue}, + TrUserData); + {response_txn, MVPrev} -> + id({response_txn, + 'merge_msg_Etcd.TxnResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_txn, NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResponseOp'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResponseOp'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.ResponseOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResponseOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.ResponseOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResponseOp'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.ResponseOp'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.ResponseOp'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.ResponseOp'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.Compare'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Bin, 0, 0, + id('EQUAL', TrUserData), + id('VERSION', TrUserData), + id(<<>>, TrUserData), + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.Compare'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_result'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<16, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_target'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_version'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<40, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<48, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_mod_revision'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<58, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_value'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_lease'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<130, 4, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_range_end'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, _) -> + S1 = #{result => F@_1, target => F@_2, key => F@_3, + range_end => F@_5}, + if F@_4 == '$undef' -> S1; + true -> S1#{target_union => F@_4} + end; +'dfp_read_field_def_Etcd.Compare'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.Compare'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.Compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.Compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dg_read_field_def_Etcd.Compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.Compare_result'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 16 -> + 'd_field_Etcd.Compare_target'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 26 -> + 'd_field_Etcd.Compare_key'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 32 -> + 'd_field_Etcd.Compare_version'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 40 -> + 'd_field_Etcd.Compare_create_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 48 -> + 'd_field_Etcd.Compare_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 58 -> + 'd_field_Etcd.Compare_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 64 -> + 'd_field_Etcd.Compare_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 514 -> + 'd_field_Etcd.Compare_range_end'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 1 -> + 'skip_64_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.Compare'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.Compare'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + end + end; +'dg_read_field_def_Etcd.Compare'(<<>>, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, _) -> + S1 = #{result => F@_1, target => F@_2, key => F@_3, + range_end => F@_5}, + if F@_4 == '$undef' -> S1; + true -> S1#{target_union => F@_4} + end. + +'d_field_Etcd.Compare_result'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_result'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_result'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.Compare.CompareResult'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.Compare_target'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_target'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_target'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.Compare.CompareTarget'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Compare_key'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_key'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_key'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Compare_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({version, NewFValue}, TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({create_revision, NewFValue}, + TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Compare_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({mod_revision, NewFValue}, TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_value'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_value'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_value'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({value, NewFValue}, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Compare_lease'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_lease'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_lease'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({lease, NewFValue}, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Compare_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Compare_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, TrUserData). + +'skip_varint_Etcd.Compare'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'skip_varint_Etcd.Compare'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'skip_varint_Etcd.Compare'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.Compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.Compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.Compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.Compare'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_group_Etcd.Compare'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.Compare'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_32_Etcd.Compare'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_64_Etcd.Compare'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.TxnRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Bin, 0, 0, + id([], TrUserData), id([], TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.TxnRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_success'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_failure'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<>>, 0, 0, R1, R2, + R3, TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{compare => lists_reverse(R1, TrUserData)} + end, + S3 = if R2 == '$undef' -> S2; + true -> S2#{success => lists_reverse(R2, TrUserData)} + end, + if R3 == '$undef' -> S3; + true -> S3#{failure => lists_reverse(R3, TrUserData)} + end; +'dfp_read_field_def_Etcd.TxnRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.TxnRequest'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.TxnRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.TxnRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.TxnRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.TxnRequest_compare'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.TxnRequest_success'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.TxnRequest_failure'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.TxnRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.TxnRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_Etcd.TxnRequest'(<<>>, 0, 0, R1, R2, + R3, TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{compare => lists_reverse(R1, TrUserData)} + end, + S3 = if R2 == '$undef' -> S2; + true -> S2#{success => lists_reverse(R2, TrUserData)} + end, + if R3 == '$undef' -> S3; + true -> S3#{failure => lists_reverse(R3, TrUserData)} + end. + +'d_field_Etcd.TxnRequest_compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Compare'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, + cons(NewFValue, Prev, TrUserData), + F@_2, F@_3, TrUserData). + +'d_field_Etcd.TxnRequest_success'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_success'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_success'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RequestOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + F@_3, TrUserData). + +'d_field_Etcd.TxnRequest_failure'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_failure'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_failure'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RequestOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, F@_1, + F@_2, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.TxnRequest'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_Etcd.TxnRequest'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.TxnRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.TxnRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.TxnRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.TxnRequest'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_Etcd.TxnRequest'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_Etcd.TxnRequest'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_Etcd.TxnRequest'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.TxnResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(false, TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.TxnResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_responses'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<>>, 0, 0, F@_1, + F@_2, R1, TrUserData) -> + S1 = #{succeeded => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{responses => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.TxnResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.TxnResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.TxnResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.TxnResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.TxnResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.TxnResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.TxnResponse_responses'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.TxnResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.TxnResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_Etcd.TxnResponse'(<<>>, 0, 0, F@_1, + F@_2, R1, TrUserData) -> + S1 = #{succeeded => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{responses => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.TxnResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.TxnResponse_succeeded'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_succeeded'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, F@_1, + NewFValue, F@_3, TrUserData). + +'d_field_Etcd.TxnResponse_responses'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_responses'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_responses'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, F@_1, + F@_2, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.TxnResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.TxnResponse'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_Etcd.TxnResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.TxnResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.TxnResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.TxnResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.TxnResponse'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_Etcd.TxnResponse'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_Etcd.TxnResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.TxnResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.CompactionRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Bin, 0, 0, + id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CompactionRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CompactionRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CompactionRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{revision => F@_1, physical => F@_2}; +'dfp_read_field_def_Etcd.CompactionRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.CompactionRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.CompactionRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CompactionRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.CompactionRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CompactionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.CompactionRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CompactionRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{revision => F@_1, physical => F@_2}. + +'d_field_Etcd.CompactionRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CompactionRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.CompactionRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.CompactionRequest_physical'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CompactionRequest_physical'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.CompactionRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.CompactionRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.CompactionRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.CompactionRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.CompactionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CompactionRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.CompactionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.CompactionRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.CompactionRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.CompactionRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.CompactionResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CompactionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.CompactionResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.CompactionResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.CompactionResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.CompactionResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.CompactionResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CompactionResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.CompactionResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CompactionResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CompactionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.CompactionResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CompactionResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.CompactionResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.CompactionResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CompactionResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.CompactionResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.CompactionResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.CompactionResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.CompactionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CompactionResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.CompactionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.CompactionResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.CompactionResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.CompactionResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.HashRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.HashRequest'(<<>>, 0, 0, _) -> + #{}; +'dfp_read_field_def_Etcd.HashRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.HashRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.HashRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.HashRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashRequest'(Rest, 0, 0, TrUserData); + 1 -> 'skip_64_Etcd.HashRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.HashRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> 'skip_32_Etcd.HashRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.HashRequest'(<<>>, 0, 0, _) -> + #{}. + +'skip_varint_Etcd.HashRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.HashRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.HashRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'skip_length_delimited_Etcd.HashRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.HashRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.HashRequest'(<<_:32, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.HashRequest'(<<_:64, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.HashKVRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashKVRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HashKVRequest'(<<>>, 0, 0, + F@_1, _) -> + #{revision => F@_1}; +'dfp_read_field_def_Etcd.HashKVRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HashKVRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.HashKVRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashKVRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.HashKVRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashKVRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.HashKVRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HashKVRequest'(<<>>, 0, 0, F@_1, + _) -> + #{revision => F@_1}. + +'d_field_Etcd.HashKVRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HashKVRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.HashKVRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.HashKVRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HashKVRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.HashKVRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.HashKVRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashKVRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.HashKVRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.HashKVRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.HashKVRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.HashKVRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.HashKVResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashKVResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{hash => F@_2, compact_revision => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.HashKVResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.HashKVResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.HashKVResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashKVResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.HashKVResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HashKVResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 24 -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashKVResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.HashKVResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.HashKVResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{hash => F@_2, compact_revision => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.HashKVResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.HashKVResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.HashKVResponse_hash'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.HashKVResponse_hash'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Etcd.HashKVResponse_compact_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.HashKVResponse_compact_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Etcd.HashKVResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.HashKVResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.HashKVResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.HashKVResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashKVResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.HashKVResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.HashKVResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.HashKVResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.HashKVResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.HashResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.HashResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.HashResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.HashResponse_hash'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.HashResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{hash => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.HashResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.HashResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.HashResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.HashResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HashResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.HashResponse_hash'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.HashResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HashResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{hash => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.HashResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.HashResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.HashResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.HashResponse_hash'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashResponse_hash'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.HashResponse_hash'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HashResponse'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.HashResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.HashResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.HashResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.HashResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.HashResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.HashResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.HashResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.HashResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.SnapshotRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.SnapshotRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.SnapshotRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.SnapshotRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.SnapshotRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.SnapshotRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.SnapshotRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.SnapshotRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.SnapshotRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.SnapshotRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.SnapshotRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.SnapshotRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.SnapshotRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.SnapshotRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.SnapshotRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.SnapshotRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.SnapshotRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.SnapshotRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.SnapshotRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.SnapshotRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.SnapshotRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.SnapshotResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.SnapshotResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{remaining_bytes => F@_2, blob => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.SnapshotResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.SnapshotResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.SnapshotResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.SnapshotResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.SnapshotResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, 0, + 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.SnapshotResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 3 -> + 'skip_group_Etcd.SnapshotResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.SnapshotResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{remaining_bytes => F@_2, blob => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.SnapshotResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.SnapshotResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.SnapshotResponse_remaining_bytes'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.SnapshotResponse_remaining_bytes'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.SnapshotResponse_blob'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.SnapshotResponse_blob'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.SnapshotResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.SnapshotResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.SnapshotResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.SnapshotResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.SnapshotResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.SnapshotResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.SnapshotResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.SnapshotResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.SnapshotResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.WatchRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.WatchRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request_union => F@_1} + end; +'dfp_read_field_def_Etcd.WatchRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.WatchRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.WatchRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.WatchRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, 0, 0, + F@_1, TrUserData); + 18 -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, 0, 0, + F@_1, TrUserData); + 26 -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.WatchRequest'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request_union => F@_1} + end. + +'d_field_Etcd.WatchRequest_create_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchRequest_create_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchCreateRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({create_request, NewFValue}, + TrUserData); + {create_request, MVPrev} -> + id({create_request, + 'merge_msg_Etcd.WatchCreateRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({create_request, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.WatchRequest_cancel_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchRequest_cancel_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchCancelRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({cancel_request, NewFValue}, + TrUserData); + {cancel_request, MVPrev} -> + id({cancel_request, + 'merge_msg_Etcd.WatchCancelRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({cancel_request, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.WatchRequest_progress_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.WatchRequest_progress_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchProgressRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({progress_request, + NewFValue}, + TrUserData); + {progress_request, MVPrev} -> + id({progress_request, + 'merge_msg_Etcd.WatchProgressRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({progress_request, + NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.WatchRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.WatchRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.WatchRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.WatchRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.WatchRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.WatchRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.WatchRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.WatchRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.WatchCreateRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id([], TrUserData), + id(false, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, R1, F@_6, + F@_7, F@_8, TrUserData) -> + #{key => F@_1, range_end => F@_2, + start_revision => F@_3, progress_notify => F@_4, + filters => lists_reverse(R1, TrUserData), + prev_kv => F@_6, watch_id => F@_7, fragment => F@_8}; +'dfp_read_field_def_Etcd.WatchCreateRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'dg_read_field_def_Etcd.WatchCreateRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'dg_read_field_def_Etcd.WatchCreateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchCreateRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dg_read_field_def_Etcd.WatchCreateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 18 -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 24 -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 32 -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 42 -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 40 -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 48 -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 56 -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 64 -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchCreateRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchCreateRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 5 -> + 'skip_32_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchCreateRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, R1, F@_6, + F@_7, F@_8, TrUserData) -> + #{key => F@_1, range_end => F@_2, + start_revision => F@_3, progress_notify => F@_4, + filters => lists_reverse(R1, TrUserData), + prev_kv => F@_6, watch_id => F@_7, fragment => F@_8}. + +'d_field_Etcd.WatchCreateRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchCreateRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_start_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_start_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, NewFValue, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_progress_notify'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_progress_notify'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, NewFValue, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_filters'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_filters'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, Prev, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.WatchCreateRequest.FilterType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, TrUserData). + +'d_pfield_Etcd.WatchCreateRequest_filters'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_pfield_Etcd.WatchCreateRequest_filters'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, E, + F@_6, F@_7, F@_8, TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_Etcd.WatchCreateRequest_filters'(PackedBytes, + 0, 0, E, TrUserData), + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + NewSeq, F@_6, F@_7, F@_8, + TrUserData). + +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, AccSeq, TrUserData) + when N < 57 -> + 'd_packed_field_Etcd.WatchCreateRequest_filters'(Rest, + N + 7, X bsl N + Acc, + AccSeq, TrUserData); +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, AccSeq, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.WatchCreateRequest.FilterType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'd_packed_field_Etcd.WatchCreateRequest_filters'(RestF, + 0, 0, [NewFValue | AccSeq], + TrUserData); +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<>>, + 0, 0, AccSeq, _) -> + AccSeq. + +'d_field_Etcd.WatchCreateRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + _, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, NewFValue, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, NewFValue, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_fragment'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_fragment'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, NewFValue, + TrUserData). + +'skip_varint_Etcd.WatchCreateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'skip_varint_Etcd.WatchCreateRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'skip_varint_Etcd.WatchCreateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_length_delimited_Etcd.WatchCreateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchCreateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); +'skip_length_delimited_Etcd.WatchCreateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_group_Etcd.WatchCreateRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_32_Etcd.WatchCreateRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_64_Etcd.WatchCreateRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'decode_msg_Etcd.WatchCancelRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.WatchCancelRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchCancelRequest'(<<>>, 0, 0, + F@_1, _) -> + #{watch_id => F@_1}; +'dfp_read_field_def_Etcd.WatchCancelRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.WatchCancelRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.WatchCancelRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchCancelRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.WatchCancelRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchCancelRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchCancelRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchCancelRequest'(<<>>, 0, 0, + F@_1, _) -> + #{watch_id => F@_1}. + +'d_field_Etcd.WatchCancelRequest_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchCancelRequest_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCancelRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.WatchCancelRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.WatchCancelRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.WatchCancelRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.WatchCancelRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchCancelRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.WatchCancelRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.WatchCancelRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.WatchCancelRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.WatchCancelRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.WatchProgressRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Bin, 0, + 0, TrUserData). + +'dfp_read_field_def_Etcd.WatchProgressRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.WatchProgressRequest'(Other, + Z1, Z2, TrUserData) -> + 'dg_read_field_def_Etcd.WatchProgressRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.WatchProgressRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchProgressRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.WatchProgressRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchProgressRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.WatchProgressRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.WatchProgressRequest'(<<>>, 0, + 0, _) -> + #{}. + +'skip_varint_Etcd.WatchProgressRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.WatchProgressRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.WatchProgressRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.WatchProgressRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchProgressRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.WatchProgressRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.WatchProgressRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.WatchProgressRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.WatchProgressRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.WatchResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(false, TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.WatchResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_created'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_events'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, TrUserData) -> + S1 = #{watch_id => F@_2, created => F@_3, + canceled => F@_4, compact_revision => F@_5, + cancel_reason => F@_6, fragment => F@_7}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{events => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.WatchResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dg_read_field_def_Etcd.WatchResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'dg_read_field_def_Etcd.WatchResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dg_read_field_def_Etcd.WatchResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 16 -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 24 -> + 'd_field_Etcd.WatchResponse_created'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 32 -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 40 -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); + 50 -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 56 -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 90 -> + 'd_field_Etcd.WatchResponse_events'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); + 1 -> + 'skip_64_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); + 5 -> + 'skip_32_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchResponse'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, R1, + TrUserData) -> + S1 = #{watch_id => F@_2, created => F@_3, + canceled => F@_4, compact_revision => F@_5, + cancel_reason => F@_6, fragment => F@_7}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{events => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.WatchResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_created'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_created'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_created'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_canceled'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_canceled'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_compact_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_compact_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_cancel_reason'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchResponse_cancel_reason'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + _, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_fragment'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_fragment'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_events'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_events'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_events'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.Event'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.WatchResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'skip_varint_Etcd.WatchResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'skip_varint_Etcd.WatchResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_length_delimited_Etcd.WatchResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'skip_length_delimited_Etcd.WatchResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_group_Etcd.WatchResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_32_Etcd.WatchResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_64_Etcd.WatchResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'decode_msg_Etcd.LeaseGrantRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'TTL' => F@_1, 'ID' => F@_2}; +'dfp_read_field_def_Etcd.LeaseGrantRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseGrantRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseGrantRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseGrantRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseGrantRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'TTL' => F@_1, 'ID' => F@_2}. + +'d_field_Etcd.LeaseGrantRequest_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseGrantRequest_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LeaseGrantRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseGrantRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseGrantRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseGrantRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaseGrantRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseGrantRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseGrantRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseGrantRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseGrantRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseGrantRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseGrantRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaseGrantResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, error => F@_4}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseGrantResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseGrantResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseGrantResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 16 -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 34 -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseGrantResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseGrantResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, error => F@_4}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseGrantResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.LeaseGrantResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_Etcd.LeaseGrantResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaseGrantResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, NewFValue, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.LeaseGrantResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaseGrantResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.LeaseGrantResponse_error'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.LeaseGrantResponse_error'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseGrantResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'skip_varint_Etcd.LeaseGrantResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.LeaseGrantResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_length_delimited_Etcd.LeaseGrantResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseGrantResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_Etcd.LeaseGrantResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_group_Etcd.LeaseGrantResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, 0, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_32_Etcd.LeaseGrantResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_64_Etcd.LeaseGrantResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'decode_msg_Etcd.LeaseRevokeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseRevokeRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseRevokeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseRevokeRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseRevokeRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseRevokeRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseRevokeRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseRevokeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseRevokeRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseRevokeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseRevokeRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseRevokeRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.LeaseRevokeRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseRevokeRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseRevokeRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseRevokeRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseRevokeResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseRevokeResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseRevokeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseRevokeResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseRevokeResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseRevokeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseRevokeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaseRevokeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseRevokeResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseRevokeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseRevokeResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseRevokeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.LeaseRevokeResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseRevokeResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseRevokeResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseRevokeResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseCheckpoint'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'ID' => F@_1, remaining_TTL => F@_2}; +'dfp_read_field_def_Etcd.LeaseCheckpoint'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpoint'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpoint'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpoint'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpoint'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'ID' => F@_1, remaining_TTL => F@_2}. + +'d_field_Etcd.LeaseCheckpoint_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseCheckpoint_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LeaseCheckpoint_remaining_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.LeaseCheckpoint_remaining_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseCheckpoint'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaseCheckpoint'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpoint'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpoint'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpoint'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseCheckpoint'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseCheckpoint'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseCheckpoint'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaseCheckpointRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Bin, 0, + 0, id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> + S1#{checkpoints => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpointRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpointRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpointRequest'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<>>, 0, + 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> + S1#{checkpoints => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.LeaseCheckpointRequest_checkpoints'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.LeaseCheckpointRequest_checkpoints'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaseCheckpoint'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseCheckpointRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpointRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseCheckpointRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpointRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpointRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpointRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseCheckpointRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseCheckpointRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseCheckpointRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseCheckpointResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Bin, + 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpointResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, 0, + 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpointResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpointResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseCheckpointResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.LeaseCheckpointResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaseCheckpointResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpointResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseCheckpointResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpointResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpointResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpointResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseCheckpointResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseCheckpointResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseCheckpointResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseKeepAliveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Bin, 0, + 0, id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseKeepAliveRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseKeepAliveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseKeepAliveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseKeepAliveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseKeepAliveRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseKeepAliveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseKeepAliveRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseKeepAliveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseKeepAliveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseKeepAliveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 24 -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseKeepAliveResponse'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<>>, 0, + 0, F@_1, F@_2, F@_3, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseKeepAliveResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.LeaseKeepAliveResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, TrUserData). + +'d_field_Etcd.LeaseKeepAliveResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseKeepAliveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_Etcd.LeaseKeepAliveResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.LeaseKeepAliveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.LeaseKeepAliveResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.LeaseKeepAliveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.LeaseKeepAliveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.LeaseTimeToLiveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Bin, 0, + 0, id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{'ID' => F@_1, keys => F@_2}; +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseTimeToLiveRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<>>, 0, + 0, F@_1, F@_2, _) -> + #{'ID' => F@_1, keys => F@_2}. + +'d_field_Etcd.LeaseTimeToLiveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveRequest_keys'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveRequest_keys'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseTimeToLiveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseTimeToLiveRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.LeaseTimeToLiveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.LeaseTimeToLiveRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.LeaseTimeToLiveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.LeaseTimeToLiveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.LeaseTimeToLiveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Bin, + 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, TrUserData) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, grantedTTL => F@_4, + keys => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 16 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + 24 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + 32 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); + 42 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseTimeToLiveResponse'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, TrUserData) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, grantedTTL => F@_4, + keys => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseTimeToLiveResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_keys'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_keys'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseTimeToLiveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'skip_varint_Etcd.LeaseTimeToLiveResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_Etcd.LeaseTimeToLiveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_group_Etcd.LeaseTimeToLiveResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_32_Etcd.LeaseTimeToLiveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_64_Etcd.LeaseTimeToLiveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.LeaseLeasesRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.LeaseLeasesRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseLeasesRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseLeasesRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseLeasesRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.LeaseLeasesRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.LeaseLeasesRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.LeaseLeasesRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.LeaseLeasesRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.LeaseLeasesRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseLeasesRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.LeaseLeasesRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.LeaseLeasesRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.LeaseLeasesRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.LeaseLeasesRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.LeaseStatus'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseStatus'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaseStatus'(<<>>, 0, 0, F@_1, + _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseStatus'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseStatus'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseStatus'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseStatus'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.LeaseStatus'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseStatus'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.LeaseStatus'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseStatus'(<<>>, 0, 0, F@_1, + _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseStatus_ID'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseStatus_ID'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseStatus'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseStatus'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseStatus'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.LeaseStatus'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseStatus'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseStatus'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseStatus'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.LeaseStatus'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.LeaseStatus'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.LeaseStatus'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.LeaseLeasesResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{leases => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseLeasesResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseLeasesResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseLeasesResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseLeasesResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{leases => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.LeaseLeasesResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseLeasesResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LeaseLeasesResponse_leases'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseLeasesResponse_leases'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaseStatus'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseLeasesResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseLeasesResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.LeaseLeasesResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseLeasesResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseLeasesResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseLeasesResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseLeasesResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseLeasesResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseLeasesResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.Member'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Bin, 0, 0, + id(0, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), id([], TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.Member'(<<8, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_ID'(Rest, Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_peerURLs'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_clientURLs'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<40, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_isLearner'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<>>, 0, 0, F@_1, F@_2, + R1, R2, F@_5, TrUserData) -> + #{'ID' => F@_1, name => F@_2, + peerURLs => lists_reverse(R1, TrUserData), + clientURLs => lists_reverse(R2, TrUserData), + isLearner => F@_5}; +'dfp_read_field_def_Etcd.Member'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.Member'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.Member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.Member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dg_read_field_def_Etcd.Member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.Member_ID'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 18 -> + 'd_field_Etcd.Member_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 26 -> + 'd_field_Etcd.Member_peerURLs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 34 -> + 'd_field_Etcd.Member_clientURLs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 40 -> + 'd_field_Etcd.Member_isLearner'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 1 -> + 'skip_64_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.Member'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.Member'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + end + end; +'dg_read_field_def_Etcd.Member'(<<>>, 0, 0, F@_1, F@_2, + R1, R2, F@_5, TrUserData) -> + #{'ID' => F@_1, name => F@_2, + peerURLs => lists_reverse(R1, TrUserData), + clientURLs => lists_reverse(R2, TrUserData), + isLearner => F@_5}. + +'d_field_Etcd.Member_ID'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_ID'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Member_ID'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Member_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Member_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_clientURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_clientURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Member_clientURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, F@_3, + cons(NewFValue, Prev, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Member_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Member_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, TrUserData). + +'skip_varint_Etcd.Member'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'skip_varint_Etcd.Member'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'skip_varint_Etcd.Member'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.Member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.Member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.Member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.Member'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_group_Etcd.Member'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.Member'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_32_Etcd.Member'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_64_Etcd.Member'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.MemberAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Bin, 0, 0, + id([], TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberAddRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberAddRequest'(<<>>, 0, 0, + R1, F@_2, TrUserData) -> + #{peerURLs => lists_reverse(R1, TrUserData), + isLearner => F@_2}; +'dfp_read_field_def_Etcd.MemberAddRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberAddRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.MemberAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberAddRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberAddRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberAddRequest'(<<>>, 0, 0, + R1, F@_2, TrUserData) -> + #{peerURLs => lists_reverse(R1, TrUserData), + isLearner => F@_2}. + +'d_field_Etcd.MemberAddRequest_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberAddRequest_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddRequest'(RestF, 0, 0, + cons(NewFValue, Prev, + TrUserData), + F@_2, TrUserData). + +'d_field_Etcd.MemberAddRequest_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberAddRequest_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberAddRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberAddRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.MemberAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberAddRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberAddResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.MemberAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{member => F@_2} + end, + if R1 == '$undef' -> S3; + true -> S3#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberAddResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.MemberAddResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.MemberAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberAddResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.MemberAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, 0, 0, + F@_1, F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberAddResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberAddResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberAddResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{member => F@_2} + end, + if R1 == '$undef' -> S3; + true -> S3#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.MemberAddResponse_member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.Member'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_Etcd.MemberAddResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.MemberAddResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.MemberAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.MemberAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.MemberAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.MemberAddResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.MemberAddResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.MemberAddResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.MemberRemoveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Bin, 0, 0, + id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberRemoveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.MemberRemoveRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MemberRemoveRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberRemoveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberRemoveRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberRemoveRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.MemberRemoveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MemberRemoveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberRemoveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MemberRemoveRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MemberRemoveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MemberRemoveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberRemoveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MemberRemoveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MemberRemoveRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MemberRemoveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MemberRemoveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MemberRemoveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberRemoveResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberRemoveResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberRemoveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberRemoveResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberRemoveResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberRemoveResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberRemoveResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberRemoveResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberRemoveResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberRemoveResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberRemoveResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberRemoveResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberRemoveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberRemoveResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberRemoveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberRemoveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberRemoveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberRemoveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberRemoveResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberRemoveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberRemoveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberUpdateRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Bin, 0, 0, + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + #{'ID' => F@_1, + peerURLs => lists_reverse(R1, TrUserData)}; +'dfp_read_field_def_Etcd.MemberUpdateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberUpdateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberUpdateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberUpdateRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberUpdateRequest'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + #{'ID' => F@_1, + peerURLs => lists_reverse(R1, TrUserData)}. + +'d_field_Etcd.MemberUpdateRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(RestF, 0, + 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.MemberUpdateRequest_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateRequest_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberUpdateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberUpdateRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberUpdateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberUpdateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberUpdateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberUpdateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberUpdateRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberUpdateRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberUpdateRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberUpdateResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberUpdateResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberUpdateResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberUpdateResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberUpdateResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberUpdateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberUpdateResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberUpdateResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberUpdateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberUpdateResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberUpdateResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberUpdateResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberUpdateResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberUpdateResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberUpdateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberUpdateResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberUpdateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberUpdateResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberUpdateResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberUpdateResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberListRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.MemberListRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.MemberListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.MemberListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberListRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.MemberListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberListRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.MemberListRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberListRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.MemberListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.MemberListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.MemberListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.MemberListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.MemberListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.MemberListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.MemberListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.MemberListRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.MemberListRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.MemberListResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberListResponse_members'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberListResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberListResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberListResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.MemberListResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberListResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberListResponse'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberListResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberListResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberListResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberListResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberListResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberListResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberListResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberPromoteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Bin, 0, + 0, id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberPromoteRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.MemberPromoteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MemberPromoteRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberPromoteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberPromoteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.MemberPromoteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberPromoteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberPromoteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MemberPromoteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.MemberPromoteRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MemberPromoteRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberPromoteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MemberPromoteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MemberPromoteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MemberPromoteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberPromoteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.MemberPromoteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MemberPromoteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MemberPromoteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MemberPromoteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MemberPromoteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberPromoteResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberPromoteResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberPromoteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberPromoteResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberPromoteResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberPromoteResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberPromoteResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberPromoteResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberPromoteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberPromoteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberPromoteResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.MemberPromoteResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberPromoteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberPromoteResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberPromoteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.MemberPromoteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberPromoteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberPromoteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.MemberPromoteResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberPromoteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.MemberPromoteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.DefragmentRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.DefragmentRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.DefragmentRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.DefragmentRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.DefragmentRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DefragmentRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.DefragmentRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DefragmentRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.DefragmentRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DefragmentRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.DefragmentRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.DefragmentRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.DefragmentRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.DefragmentRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.DefragmentRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.DefragmentRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.DefragmentRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DefragmentRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.DefragmentRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.DefragmentRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.DefragmentRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.DefragmentRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.DefragmentResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DefragmentResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.DefragmentResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.DefragmentResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.DefragmentResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.DefragmentResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DefragmentResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.DefragmentResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DefragmentResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.DefragmentResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.DefragmentResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.DefragmentResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.DefragmentResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DefragmentResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.DefragmentResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.DefragmentResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.DefragmentResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.DefragmentResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DefragmentResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.DefragmentResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.DefragmentResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.DefragmentResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.DefragmentResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MoveLeaderRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.MoveLeaderRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MoveLeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{targetID => F@_1}; +'dfp_read_field_def_Etcd.MoveLeaderRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MoveLeaderRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MoveLeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MoveLeaderRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MoveLeaderRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{targetID => F@_1}. + +'d_field_Etcd.MoveLeaderRequest_targetID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MoveLeaderRequest_targetID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.MoveLeaderRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MoveLeaderRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.MoveLeaderRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MoveLeaderRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MoveLeaderRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MoveLeaderRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.MoveLeaderRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.MoveLeaderRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MoveLeaderRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MoveLeaderResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MoveLeaderResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MoveLeaderResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.MoveLeaderResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MoveLeaderResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MoveLeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MoveLeaderResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MoveLeaderResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.MoveLeaderResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MoveLeaderResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.MoveLeaderResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MoveLeaderResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MoveLeaderResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MoveLeaderResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MoveLeaderResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MoveLeaderResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MoveLeaderResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MoveLeaderResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MoveLeaderResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AlarmRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Bin, 0, 0, + id('GET', TrUserData), + id(0, TrUserData), + id('NONE', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_action'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{action => F@_1, memberID => F@_2, alarm => F@_3}; +'dfp_read_field_def_Etcd.AlarmRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.AlarmRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AlarmRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.AlarmRequest_action'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 24 -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{action => F@_1, memberID => F@_2, alarm => F@_3}. + +'d_field_Etcd.AlarmRequest_action'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_action'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_action'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.AlarmRequest.AlarmAction'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_Etcd.AlarmRequest_memberID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_memberID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Etcd.AlarmRequest_alarm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_alarm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id('d_enum_Etcd.AlarmType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Etcd.AlarmRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.AlarmRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.AlarmRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.AlarmRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.AlarmRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.AlarmRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.AlarmRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.AlarmRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.AlarmMember'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Bin, 0, 0, + id(0, TrUserData), + id('NONE', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmMember'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmMember'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmMember'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{memberID => F@_1, alarm => F@_2}; +'dfp_read_field_def_Etcd.AlarmMember'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmMember'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AlarmMember'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmMember'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AlarmMember'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmMember'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmMember'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmMember'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{memberID => F@_1, alarm => F@_2}. + +'d_field_Etcd.AlarmMember_memberID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmMember_memberID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmMember'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.AlarmMember_alarm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmMember_alarm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id('d_enum_Etcd.AlarmType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmMember'(RestF, 0, 0, F@_1, + NewFValue, TrUserData). + +'skip_varint_Etcd.AlarmMember'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AlarmMember'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AlarmMember'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AlarmMember'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmMember'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AlarmMember'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmMember'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.AlarmMember'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.AlarmMember'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AlarmMember'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AlarmResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{alarms => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.AlarmResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AlarmResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.AlarmResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AlarmResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmResponse'(<<>>, 0, 0, F@_1, + R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{alarms => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.AlarmResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AlarmResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AlarmResponse_alarms'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmResponse_alarms'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.AlarmMember'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AlarmResponse'(RestF, 0, 0, + F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.AlarmResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AlarmResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.AlarmResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AlarmResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AlarmResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AlarmResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AlarmResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AlarmResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.StatusRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.StatusRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.StatusRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.StatusRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.StatusRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.StatusRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.StatusRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.StatusRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.StatusRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.StatusRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.StatusRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.StatusRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.StatusRequest'(<<>>, 0, 0, _) -> + #{}. + +'skip_varint_Etcd.StatusRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.StatusRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.StatusRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.StatusRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'skip_length_delimited_Etcd.StatusRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.StatusRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.StatusRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.StatusRequest'(<<_:32, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.StatusRequest'(<<_:64, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.StatusResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id([], TrUserData), + id(0, TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.StatusResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_version'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_leader'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_errors'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, F@_9, F@_10, TrUserData) -> + S1 = #{version => F@_2, dbSize => F@_3, leader => F@_4, + raftIndex => F@_5, raftTerm => F@_6, + raftAppliedIndex => F@_7, + errors => lists_reverse(R1, TrUserData), + dbSizeInUse => F@_9, isLearner => F@_10}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.StatusResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'dg_read_field_def_Etcd.StatusResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_Etcd.StatusResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.StatusResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_Etcd.StatusResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.StatusResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_Etcd.StatusResponse_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 32 -> + 'd_field_Etcd.StatusResponse_leader'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + 48 -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 56 -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 66 -> + 'd_field_Etcd.StatusResponse_errors'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 72 -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); + 80 -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.StatusResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_Etcd.StatusResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.StatusResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 3 -> + 'skip_group_Etcd.StatusResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_Etcd.StatusResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) + end + end; +'dg_read_field_def_Etcd.StatusResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, F@_9, F@_10, TrUserData) -> + S1 = #{version => F@_2, dbSize => F@_3, leader => F@_4, + raftIndex => F@_5, raftTerm => F@_6, + raftAppliedIndex => F@_7, + errors => lists_reverse(R1, TrUserData), + dbSizeInUse => F@_9, isLearner => F@_10}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.StatusResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData). + +'d_field_Etcd.StatusResponse_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_dbSize'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_dbSize'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftIndex'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_raftIndex'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftTerm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_raftTerm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftAppliedIndex'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_raftAppliedIndex'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_errors'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_errors'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_errors'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, Prev, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, + cons(NewFValue, Prev, TrUserData), + F@_9, F@_10, TrUserData). + +'d_field_Etcd.StatusResponse_dbSizeInUse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_Etcd.StatusResponse_dbSizeInUse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, NewFValue, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, NewFValue, + TrUserData). + +'skip_varint_Etcd.StatusResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'skip_varint_Etcd.StatusResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'skip_varint_Etcd.StatusResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_Etcd.StatusResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.StatusResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'skip_length_delimited_Etcd.StatusResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.StatusResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_Etcd.StatusResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_32_Etcd.StatusResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_Etcd.StatusResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_Etcd.AuthEnableRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthEnableRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.AuthEnableRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthEnableRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthEnableRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthEnableRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.AuthEnableRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthEnableRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthEnableRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthEnableRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthEnableRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthEnableRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.AuthEnableRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthEnableRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthEnableRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthEnableRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthEnableRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthEnableRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthEnableRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.AuthEnableRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.AuthEnableRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthEnableRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthDisableRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthDisableRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.AuthDisableRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthDisableRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthDisableRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthDisableRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.AuthDisableRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthDisableRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthDisableRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthDisableRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthDisableRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthDisableRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthDisableRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthDisableRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthDisableRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthDisableRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthDisableRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthDisableRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthDisableRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthenticateRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<>>, 0, + 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}; +'dfp_read_field_def_Etcd.AuthenticateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthenticateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthenticateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthenticateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthenticateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthenticateRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthenticateRequest'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthenticateRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}. + +'d_field_Etcd.AuthenticateRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(RestF, 0, + 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthenticateRequest_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateRequest_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(RestF, 0, + 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthenticateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthenticateRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthenticateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthenticateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthenticateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthenticateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthenticateRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthenticateRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthenticateRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{name => F@_1, password => F@_2}, + if F@_3 == '$undef' -> S1; + true -> S1#{options => F@_3} + end; +'dfp_read_field_def_Etcd.AuthUserAddRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserAddRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserAddRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserAddRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{name => F@_1, password => F@_2}, + if F@_3 == '$undef' -> S1; + true -> S1#{options => F@_3} + end. + +'d_field_Etcd.AuthUserAddRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.AuthUserAddRequest_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.AuthUserAddRequest_options'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_options'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, F@_1, F@_2, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.AuthUserAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.AuthUserAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.AuthUserAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.AuthUserAddRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.AuthUserAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.AuthUserAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.AuthUserGetRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGetRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthUserGetRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGetRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGetRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGetRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGetRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthUserGetRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserGetRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthUserGetRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserGetRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserGetRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserGetRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGetRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserGetRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserGetRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserGetRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserGetRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserDeleteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Bin, 0, + 0, id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserDeleteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserDeleteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthUserDeleteRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserDeleteRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserDeleteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserDeleteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserDeleteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserDeleteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserDeleteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserDeleteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserDeleteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserChangePasswordRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}; +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserChangePasswordRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserChangePasswordRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserChangePasswordRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}. + +'d_field_Etcd.AuthUserChangePasswordRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthUserChangePasswordRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(RestF, + 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserChangePasswordRequest_password'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserChangePasswordRequest_password'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(RestF, + 0, 0, F@_1, + NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserChangePasswordRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AuthUserChangePasswordRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserChangePasswordRequest'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserChangePasswordRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserChangePasswordRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthUserGrantRoleRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{user => F@_1, role => F@_2}; +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGrantRoleRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{user => F@_1, role => F@_2}. + +'d_field_Etcd.AuthUserGrantRoleRequest_user'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserGrantRoleRequest_user'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthUserGrantRoleRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserGrantRoleRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserGrantRoleRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserGrantRoleRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserGrantRoleRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserGrantRoleRequest'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserGrantRoleRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserGrantRoleRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthUserRevokeRoleRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, role => F@_2}; +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserRevokeRoleRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, role => F@_2}. + +'d_field_Etcd.AuthUserRevokeRoleRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserRevokeRoleRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthUserRevokeRoleRequest_role'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserRevokeRoleRequest_role'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserRevokeRoleRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserRevokeRoleRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserRevokeRoleRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserRevokeRoleRequest'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserRevokeRoleRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserRevokeRoleRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthRoleAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleAddRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleAddRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleAddRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthRoleAddRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleAddRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthRoleAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleAddRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleAddRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGetRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{role => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGetRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGetRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGetRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGetRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{role => F@_1}. + +'d_field_Etcd.AuthRoleGetRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleGetRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthRoleGetRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGetRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleGetRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGetRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGetRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGetRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleGetRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleGetRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleGetRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserListRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserListRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.AuthUserListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.AuthUserListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserListRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserListRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthUserListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthUserListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthUserListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthUserListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthUserListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthUserListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthUserListRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthUserListRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthRoleListRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleListRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.AuthRoleListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleListRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleListRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthRoleListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthRoleListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthRoleListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthRoleListRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthRoleListRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthRoleDeleteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Bin, 0, + 0, id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{role => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleDeleteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{role => F@_1}. + +'d_field_Etcd.AuthRoleDeleteRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleDeleteRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthRoleDeleteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleDeleteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleDeleteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleDeleteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleDeleteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleDeleteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGrantPermissionRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + S1 = #{name => F@_1}, + if F@_2 == '$undef' -> S1; + true -> S1#{perm => F@_2} + end; +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGrantPermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGrantPermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + S1 = #{name => F@_1}, + if F@_2 == '$undef' -> S1; + true -> S1#{perm => F@_2} + end. + +'d_field_Etcd.AuthRoleGrantPermissionRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(RestF, + 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleGrantPermissionRequest_perm'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionRequest_perm'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(RestF, + 0, 0, F@_1, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_authpb.Permission'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthRoleGrantPermissionRequest'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthRoleGrantPermissionRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthRoleGrantPermissionRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthRoleRevokePermissionRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + #{role => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleRevokePermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleRevokePermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + _) -> + #{role => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_Etcd.AuthRoleRevokePermissionRequest_role'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_role'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_Etcd.AuthRoleRevokePermissionRequest_key'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_key'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_Etcd.AuthRoleRevokePermissionRequest'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_Etcd.AuthRoleRevokePermissionRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.AuthRoleRevokePermissionRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.AuthEnableResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthEnableResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthEnableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthEnableResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthEnableResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthEnableResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthEnableResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthEnableResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthEnableResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthEnableResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthEnableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthEnableResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthEnableResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthEnableResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthEnableResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthEnableResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthEnableResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthEnableResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthEnableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthEnableResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthEnableResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthEnableResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthEnableResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthDisableResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthDisableResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthDisableResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthDisableResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthDisableResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthDisableResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthDisableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthDisableResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthDisableResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthDisableResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthDisableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthDisableResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthDisableResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthDisableResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthDisableResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthDisableResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthDisableResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthDisableResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthDisableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthDisableResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthDisableResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthDisableResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthDisableResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthenticateResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<>>, 0, + 0, F@_1, F@_2, _) -> + S1 = #{token => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthenticateResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthenticateResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthenticateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthenticateResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthenticateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthenticateResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthenticateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthenticateResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthenticateResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthenticateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthenticateResponse'(<<>>, 0, + 0, F@_1, F@_2, _) -> + S1 = #{token => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthenticateResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthenticateResponse_token'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateResponse_token'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(RestF, 0, + 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthenticateResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthenticateResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthenticateResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthenticateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthenticateResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthenticateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthenticateResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthenticateResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthenticateResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserAddResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserAddResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserAddResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserAddResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserAddResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserAddResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserAddResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserAddResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserAddResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserGetResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGetResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGetResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserGetResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserGetResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserGetResponse_roles'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserGetResponse_roles'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthUserGetResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserGetResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserGetResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserGetResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthUserGetResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthUserGetResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthUserGetResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthUserGetResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserDeleteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserDeleteResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserDeleteResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserDeleteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserDeleteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserDeleteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserDeleteResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserDeleteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserDeleteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserDeleteResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserDeleteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserDeleteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserChangePasswordResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserChangePasswordResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserChangePasswordResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserChangePasswordResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserChangePasswordResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthUserChangePasswordResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserChangePasswordResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserChangePasswordResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthUserChangePasswordResponse'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserChangePasswordResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserChangePasswordResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthUserGrantRoleResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, 0, + 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGrantRoleResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserGrantRoleResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserGrantRoleResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserGrantRoleResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserGrantRoleResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserGrantRoleResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserGrantRoleResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserGrantRoleResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserGrantRoleResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthUserRevokeRoleResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserRevokeRoleResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserRevokeRoleResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserRevokeRoleResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserRevokeRoleResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthUserRevokeRoleResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserRevokeRoleResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserRevokeRoleResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthRoleAddResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleAddResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleAddResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleAddResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleAddResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleAddResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleAddResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleAddResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGetResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{perm => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGetResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGetResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{perm => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.AuthRoleGetResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleGetResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleGetResponse_perm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleGetResponse_perm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthRoleGetResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGetResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthRoleGetResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGetResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthRoleGetResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthRoleGetResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthRoleGetResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthRoleGetResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthRoleListResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleListResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleListResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleListResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleListResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleListResponse_roles'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleListResponse_roles'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthRoleListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthRoleListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleListResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthRoleListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthRoleListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthRoleListResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthRoleListResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserListResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{users => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserListResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserListResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserListResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserListResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{users => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserListResponse_users'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserListResponse_users'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthUserListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserListResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthUserListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthUserListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthUserListResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthUserListResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthRoleDeleteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleDeleteResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleDeleteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthRoleDeleteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleDeleteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleDeleteResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleDeleteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleDeleteResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleDeleteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleDeleteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGrantPermissionResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGrantPermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGrantPermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleGrantPermissionResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthRoleGrantPermissionResponse'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthRoleGrantPermissionResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthRoleGrantPermissionResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthRoleRevokePermissionResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleRevokePermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleRevokePermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleRevokePermissionResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthRoleRevokePermissionResponse'(Bin, + FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthRoleRevokePermissionResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthRoleRevokePermissionResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.HealthCheckRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.HealthCheckRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HealthCheckRequest'(<<>>, 0, 0, + F@_1, _) -> + #{service => F@_1}; +'dfp_read_field_def_Etcd.HealthCheckRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HealthCheckRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.HealthCheckRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HealthCheckRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.HealthCheckRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HealthCheckRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.HealthCheckRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HealthCheckRequest'(<<>>, 0, 0, + F@_1, _) -> + #{service => F@_1}. + +'d_field_Etcd.HealthCheckRequest_service'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HealthCheckRequest_service'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.HealthCheckRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.HealthCheckRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HealthCheckRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.HealthCheckRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HealthCheckRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.HealthCheckRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.HealthCheckRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.HealthCheckRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.HealthCheckResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Bin, 0, 0, + id('UNKNOWN', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.HealthCheckResponse'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HealthCheckResponse'(<<>>, 0, + 0, F@_1, _) -> + #{status => F@_1}; +'dfp_read_field_def_Etcd.HealthCheckResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HealthCheckResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.HealthCheckResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.HealthCheckResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HealthCheckResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.HealthCheckResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HealthCheckResponse'(<<>>, 0, 0, + F@_1, _) -> + #{status => F@_1}. + +'d_field_Etcd.HealthCheckResponse_status'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HealthCheckResponse_status'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.HealthCheckResponse.ServingStatus'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HealthCheckResponse'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.HealthCheckResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HealthCheckResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.HealthCheckResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.HealthCheckResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.HealthCheckResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.HealthCheckResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LockRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LockRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockRequest_name'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockRequest'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{name => F@_1, lease => F@_2}; +'dfp_read_field_def_Etcd.LockRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LockRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.LockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LockRequest_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 16 -> + 'd_field_Etcd.LockRequest_lease'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LockRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LockRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LockRequest'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{name => F@_1, lease => F@_2}. + +'d_field_Etcd.LockRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LockRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LockRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LockRequest'(RestF, 0, 0, F@_1, + NewFValue, TrUserData). + +'skip_varint_Etcd.LockRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LockRequest'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.LockRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LockRequest'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.LockRequest'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LockRequest'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.LockRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LockRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LockResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LockResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockResponse_key'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{key => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LockResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LockResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LockResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LockResponse_key'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LockResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LockResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LockResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{key => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LockResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LockResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LockResponse_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockResponse_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockResponse_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LockResponse'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LockResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LockResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LockResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LockResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LockResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LockResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LockResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LockResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.UnlockRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Bin, 0, 0, + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.UnlockRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.UnlockRequest_key'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.UnlockRequest'(<<>>, 0, 0, + F@_1, _) -> + #{key => F@_1}; +'dfp_read_field_def_Etcd.UnlockRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.UnlockRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.UnlockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.UnlockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.UnlockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.UnlockRequest_key'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.UnlockRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.UnlockRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.UnlockRequest'(<<>>, 0, 0, F@_1, + _) -> + #{key => F@_1}. + +'d_field_Etcd.UnlockRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.UnlockRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.UnlockRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.UnlockRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.UnlockRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.UnlockRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.UnlockRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.UnlockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.UnlockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.UnlockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.UnlockRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.UnlockRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.UnlockRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.UnlockResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.UnlockResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.UnlockResponse_header'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.UnlockResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.UnlockResponse'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.UnlockResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.UnlockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.UnlockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.UnlockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.UnlockResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.UnlockResponse'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.UnlockResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.UnlockResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.UnlockResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.UnlockResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.UnlockResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.UnlockResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.UnlockResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.UnlockResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.UnlockResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.UnlockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.UnlockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.UnlockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.UnlockResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.UnlockResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.UnlockResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.CampaignRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.CampaignRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_name'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{name => F@_1, lease => F@_2, value => F@_3}; +'dfp_read_field_def_Etcd.CampaignRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.CampaignRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.CampaignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CampaignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.CampaignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CampaignRequest_name'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.CampaignRequest_value'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CampaignRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.CampaignRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.CampaignRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{name => F@_1, lease => F@_2, value => F@_3}. + +'d_field_Etcd.CampaignRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.CampaignRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.CampaignRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.CampaignRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.CampaignRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.CampaignRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.CampaignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CampaignRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.CampaignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.CampaignRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.CampaignRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.CampaignRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.CampaignResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CampaignResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CampaignResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CampaignResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CampaignResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{leader => F@_2} + end; +'dfp_read_field_def_Etcd.CampaignResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.CampaignResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.CampaignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CampaignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.CampaignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CampaignResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CampaignResponse'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.CampaignResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CampaignResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{leader => F@_2} + end. + +'d_field_Etcd.CampaignResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CampaignResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.CampaignResponse_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CampaignResponse_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.CampaignResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.CampaignResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.CampaignResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.CampaignResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CampaignResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.CampaignResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.CampaignResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.CampaignResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.CampaignResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaderKey'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaderKey'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<24, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_rev'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_lease'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, _) -> + #{name => F@_1, key => F@_2, rev => F@_3, + lease => F@_4}; +'dfp_read_field_def_Etcd.LeaderKey'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderKey'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.LeaderKey'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderKey'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_Etcd.LeaderKey'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderKey_name'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 18 -> + 'd_field_Etcd.LeaderKey_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.LeaderKey_rev'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.LeaderKey_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderKey'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaderKey'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderKey'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, _) -> + #{name => F@_1, key => F@_2, rev => F@_3, + lease => F@_4}. + +'d_field_Etcd.LeaderKey_name'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaderKey_name'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.LeaderKey_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_key'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_Etcd.LeaderKey_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_Etcd.LeaderKey_rev'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_rev'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_Etcd.LeaderKey_rev'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, TrUserData). + +'d_field_Etcd.LeaderKey_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaderKey_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaderKey'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_Etcd.LeaderKey'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_Etcd.LeaderKey'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderKey'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.LeaderKey'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderKey'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_Etcd.LeaderKey'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_Etcd.LeaderKey'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_Etcd.LeaderKey'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_Etcd.LeaderRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Bin, 0, 0, + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaderRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaderRequest_name'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.LeaderRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.LeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.LeaderRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderRequest'(<<>>, 0, 0, F@_1, + _) -> + #{name => F@_1}. + +'d_field_Etcd.LeaderRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaderRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaderRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaderRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.LeaderRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.LeaderRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.LeaderRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.LeaderRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.LeaderResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaderResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaderResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaderResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaderResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{kv => F@_2} + end; +'dfp_read_field_def_Etcd.LeaderResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaderResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{kv => F@_2} + end. + +'d_field_Etcd.LeaderResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaderResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LeaderResponse_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaderResponse_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaderResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaderResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaderResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaderResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaderResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaderResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.ResignRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ResignRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResignRequest_leader'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.ResignRequest'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end; +'dfp_read_field_def_Etcd.ResignRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResignRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ResignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResignRequest_leader'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResignRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResignRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ResignRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end. + +'d_field_Etcd.ResignRequest_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResignRequest_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResignRequest_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResignRequest'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResignRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResignRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResignRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ResignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.ResignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResignRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ResignRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ResignRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ResignRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.ResignResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ResignResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResignResponse_header'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.ResignResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.ResignResponse'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResignResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ResignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResignResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResignResponse'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResignResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ResignResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.ResignResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResignResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResignResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResignResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResignResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResignResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResignResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ResignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.ResignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResignResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ResignResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ResignResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ResignResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.ProclaimRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ProclaimRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.ProclaimRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.ProclaimRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{value => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end; +'dfp_read_field_def_Etcd.ProclaimRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.ProclaimRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.ProclaimRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ProclaimRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.ProclaimRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ProclaimRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.ProclaimRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ProclaimRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{value => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end. + +'d_field_Etcd.ProclaimRequest_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.ProclaimRequest_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimRequest'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.ProclaimRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.ProclaimRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.ProclaimRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.ProclaimRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.ProclaimRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.ProclaimRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ProclaimRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.ProclaimRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.ProclaimRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.ProclaimRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.ProclaimRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.ProclaimResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ProclaimResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ProclaimResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.ProclaimResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ProclaimResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ProclaimResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ProclaimResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ProclaimResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ProclaimResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.ProclaimResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ProclaimResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.ProclaimResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ProclaimResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ProclaimResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ProclaimResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ProclaimResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ProclaimResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ProclaimResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.ProclaimResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ProclaimResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ProclaimResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ProclaimResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_mvccpb.KeyValue'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.KeyValue'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_version'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}; +'dfp_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_mvccpb.KeyValue_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 16 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 24 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 32 -> + 'd_field_mvccpb.KeyValue_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 42 -> + 'd_field_mvccpb.KeyValue_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_mvccpb.KeyValue'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}. + +'d_field_mvccpb.KeyValue_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_mvccpb.KeyValue_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_mvccpb.KeyValue'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_mvccpb.KeyValue'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.KeyValue'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_mvccpb.KeyValue'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_mvccpb.KeyValue'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_mvccpb.KeyValue'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_mvccpb.Event'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Bin, 0, 0, + id('PUT', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.Event'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_type'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_prev_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end; +'dfp_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_mvccpb.Event_type'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_mvccpb.Event_kv'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.Event'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 3 -> + 'skip_group_mvccpb.Event'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end. + +'d_field_mvccpb.Event_type'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_type'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_type'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_mvccpb.Event.EventType'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_mvccpb.Event_kv'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_kv'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_kv'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_mvccpb.Event_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + F@_2, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_mvccpb.Event'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_mvccpb.Event'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_mvccpb.Event'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.Event'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_mvccpb.Event'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.Event'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_mvccpb.Event'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_mvccpb.Event'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_authpb.UserAddOptions'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Bin, 0, 0, + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.UserAddOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}; +'dfp_read_field_def_authpb.UserAddOptions'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_authpb.UserAddOptions'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_authpb.UserAddOptions'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.UserAddOptions'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_authpb.UserAddOptions'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_authpb.UserAddOptions'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}. + +'d_field_authpb.UserAddOptions_no_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'d_field_authpb.UserAddOptions_no_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.UserAddOptions'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_authpb.UserAddOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_authpb.UserAddOptions'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_authpb.UserAddOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_authpb.UserAddOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_authpb.UserAddOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.UserAddOptions'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_authpb.UserAddOptions'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_authpb.UserAddOptions'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_authpb.UserAddOptions'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_authpb.User'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Bin, 0, 0, + id(<<>>, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_authpb.User'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_password'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_roles'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_options'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end; +'dfp_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.User_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 18 -> + 'd_field_authpb.User_password'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 26 -> + 'd_field_authpb.User_roles'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 34 -> + 'd_field_authpb.User_options'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 1 -> + 'skip_64_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_authpb.User'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_authpb.User'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end. + +'d_field_authpb.User_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_roles'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_roles'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_roles'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, TrUserData). + +'d_field_authpb.User_options'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_options'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, F@_3, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_authpb.User'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_authpb.User'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_authpb.User'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.User'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_authpb.User'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.User'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_authpb.User'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_authpb.User'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_authpb.Permission'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Bin, 0, 0, + id('READ', TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_authpb.Permission'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_permType'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.Permission_permType'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_authpb.Permission_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_authpb.Permission_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_authpb.Permission'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_authpb.Permission'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_authpb.Permission_permType'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_permType'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_permType'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_authpb.Permission.Type'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_authpb.Permission_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_authpb.Permission_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_authpb.Permission'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_authpb.Permission'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_authpb.Permission'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Permission'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_authpb.Permission'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Permission'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_authpb.Permission'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_authpb.Permission'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_authpb.Role'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Bin, 0, 0, + id(<<>>, TrUserData), id([], TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.Role'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_name'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_authpb.Role'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_keyPermission'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData) -> + 'dg_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData). + +'dg_read_field_def_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.Role_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_authpb.Role_keyPermission'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.Role'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 3 -> + 'skip_group_authpb.Role'(Rest, Key bsr 3, 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end. + +'d_field_authpb.Role_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_authpb.Role_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_authpb.Role_keyPermission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_keyPermission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_authpb.Role_keyPermission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_authpb.Role'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_authpb.Role'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_authpb.Role'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_length_delimited_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'skip_length_delimited_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Role'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_authpb.Role'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Role'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_authpb.Role'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_64_authpb.Role'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'d_enum_Etcd.RangeRequest.SortOrder'(0) -> 'NONE'; +'d_enum_Etcd.RangeRequest.SortOrder'(1) -> 'ASCEND'; +'d_enum_Etcd.RangeRequest.SortOrder'(2) -> 'DESCEND'; +'d_enum_Etcd.RangeRequest.SortOrder'(V) -> V. + +'d_enum_Etcd.RangeRequest.SortTarget'(0) -> 'KEY'; +'d_enum_Etcd.RangeRequest.SortTarget'(1) -> 'VERSION'; +'d_enum_Etcd.RangeRequest.SortTarget'(2) -> 'CREATE'; +'d_enum_Etcd.RangeRequest.SortTarget'(3) -> 'MOD'; +'d_enum_Etcd.RangeRequest.SortTarget'(4) -> 'VALUE'; +'d_enum_Etcd.RangeRequest.SortTarget'(V) -> V. + +'d_enum_Etcd.Compare.CompareResult'(0) -> 'EQUAL'; +'d_enum_Etcd.Compare.CompareResult'(1) -> 'GREATER'; +'d_enum_Etcd.Compare.CompareResult'(2) -> 'LESS'; +'d_enum_Etcd.Compare.CompareResult'(3) -> 'NOT_EQUAL'; +'d_enum_Etcd.Compare.CompareResult'(V) -> V. + +'d_enum_Etcd.Compare.CompareTarget'(0) -> 'VERSION'; +'d_enum_Etcd.Compare.CompareTarget'(1) -> 'CREATE'; +'d_enum_Etcd.Compare.CompareTarget'(2) -> 'MOD'; +'d_enum_Etcd.Compare.CompareTarget'(3) -> 'VALUE'; +'d_enum_Etcd.Compare.CompareTarget'(4) -> 'LEASE'; +'d_enum_Etcd.Compare.CompareTarget'(V) -> V. + +'d_enum_Etcd.WatchCreateRequest.FilterType'(0) -> + 'NOPUT'; +'d_enum_Etcd.WatchCreateRequest.FilterType'(1) -> + 'NODELETE'; +'d_enum_Etcd.WatchCreateRequest.FilterType'(V) -> V. + +'d_enum_Etcd.AlarmType'(0) -> 'NONE'; +'d_enum_Etcd.AlarmType'(1) -> 'NOSPACE'; +'d_enum_Etcd.AlarmType'(2) -> 'CORRUPT'; +'d_enum_Etcd.AlarmType'(V) -> V. + +'d_enum_Etcd.AlarmRequest.AlarmAction'(0) -> 'GET'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(1) -> 'ACTIVATE'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(2) -> + 'DEACTIVATE'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(V) -> V. + +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +'d_enum_mvccpb.Event.EventType'(0) -> 'PUT'; +'d_enum_mvccpb.Event.EventType'(1) -> 'DELETE'; +'d_enum_mvccpb.Event.EventType'(V) -> V. + +'d_enum_authpb.Permission.Type'(0) -> 'READ'; +'d_enum_authpb.Permission.Type'(1) -> 'WRITE'; +'d_enum_authpb.Permission.Type'(2) -> 'READWRITE'; +'d_enum_authpb.Permission.Type'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'merge_msg_Etcd.ResponseHeader'(Prev, New, TrUserData); + 'Etcd.RangeRequest' -> + 'merge_msg_Etcd.RangeRequest'(Prev, New, TrUserData); + 'Etcd.RangeResponse' -> + 'merge_msg_Etcd.RangeResponse'(Prev, New, TrUserData); + 'Etcd.PutRequest' -> + 'merge_msg_Etcd.PutRequest'(Prev, New, TrUserData); + 'Etcd.PutResponse' -> + 'merge_msg_Etcd.PutResponse'(Prev, New, TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'merge_msg_Etcd.DeleteRangeRequest'(Prev, New, + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'merge_msg_Etcd.DeleteRangeResponse'(Prev, New, + TrUserData); + 'Etcd.RequestOp' -> + 'merge_msg_Etcd.RequestOp'(Prev, New, TrUserData); + 'Etcd.ResponseOp' -> + 'merge_msg_Etcd.ResponseOp'(Prev, New, TrUserData); + 'Etcd.Compare' -> + 'merge_msg_Etcd.Compare'(Prev, New, TrUserData); + 'Etcd.TxnRequest' -> + 'merge_msg_Etcd.TxnRequest'(Prev, New, TrUserData); + 'Etcd.TxnResponse' -> + 'merge_msg_Etcd.TxnResponse'(Prev, New, TrUserData); + 'Etcd.CompactionRequest' -> + 'merge_msg_Etcd.CompactionRequest'(Prev, New, + TrUserData); + 'Etcd.CompactionResponse' -> + 'merge_msg_Etcd.CompactionResponse'(Prev, New, + TrUserData); + 'Etcd.HashRequest' -> + 'merge_msg_Etcd.HashRequest'(Prev, New, TrUserData); + 'Etcd.HashKVRequest' -> + 'merge_msg_Etcd.HashKVRequest'(Prev, New, TrUserData); + 'Etcd.HashKVResponse' -> + 'merge_msg_Etcd.HashKVResponse'(Prev, New, TrUserData); + 'Etcd.HashResponse' -> + 'merge_msg_Etcd.HashResponse'(Prev, New, TrUserData); + 'Etcd.SnapshotRequest' -> + 'merge_msg_Etcd.SnapshotRequest'(Prev, New, TrUserData); + 'Etcd.SnapshotResponse' -> + 'merge_msg_Etcd.SnapshotResponse'(Prev, New, + TrUserData); + 'Etcd.WatchRequest' -> + 'merge_msg_Etcd.WatchRequest'(Prev, New, TrUserData); + 'Etcd.WatchCreateRequest' -> + 'merge_msg_Etcd.WatchCreateRequest'(Prev, New, + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'merge_msg_Etcd.WatchCancelRequest'(Prev, New, + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'merge_msg_Etcd.WatchProgressRequest'(Prev, New, + TrUserData); + 'Etcd.WatchResponse' -> + 'merge_msg_Etcd.WatchResponse'(Prev, New, TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'merge_msg_Etcd.LeaseGrantRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'merge_msg_Etcd.LeaseGrantResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'merge_msg_Etcd.LeaseRevokeRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'merge_msg_Etcd.LeaseRevokeResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'merge_msg_Etcd.LeaseCheckpoint'(Prev, New, TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'merge_msg_Etcd.LeaseCheckpointRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'merge_msg_Etcd.LeaseCheckpointResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'merge_msg_Etcd.LeaseKeepAliveRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'merge_msg_Etcd.LeaseKeepAliveResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'merge_msg_Etcd.LeaseTimeToLiveRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'merge_msg_Etcd.LeaseTimeToLiveResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'merge_msg_Etcd.LeaseLeasesRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseStatus' -> + 'merge_msg_Etcd.LeaseStatus'(Prev, New, TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'merge_msg_Etcd.LeaseLeasesResponse'(Prev, New, + TrUserData); + 'Etcd.Member' -> + 'merge_msg_Etcd.Member'(Prev, New, TrUserData); + 'Etcd.MemberAddRequest' -> + 'merge_msg_Etcd.MemberAddRequest'(Prev, New, + TrUserData); + 'Etcd.MemberAddResponse' -> + 'merge_msg_Etcd.MemberAddResponse'(Prev, New, + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'merge_msg_Etcd.MemberRemoveRequest'(Prev, New, + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'merge_msg_Etcd.MemberRemoveResponse'(Prev, New, + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'merge_msg_Etcd.MemberUpdateRequest'(Prev, New, + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'merge_msg_Etcd.MemberUpdateResponse'(Prev, New, + TrUserData); + 'Etcd.MemberListRequest' -> + 'merge_msg_Etcd.MemberListRequest'(Prev, New, + TrUserData); + 'Etcd.MemberListResponse' -> + 'merge_msg_Etcd.MemberListResponse'(Prev, New, + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'merge_msg_Etcd.MemberPromoteRequest'(Prev, New, + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'merge_msg_Etcd.MemberPromoteResponse'(Prev, New, + TrUserData); + 'Etcd.DefragmentRequest' -> + 'merge_msg_Etcd.DefragmentRequest'(Prev, New, + TrUserData); + 'Etcd.DefragmentResponse' -> + 'merge_msg_Etcd.DefragmentResponse'(Prev, New, + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'merge_msg_Etcd.MoveLeaderRequest'(Prev, New, + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'merge_msg_Etcd.MoveLeaderResponse'(Prev, New, + TrUserData); + 'Etcd.AlarmRequest' -> + 'merge_msg_Etcd.AlarmRequest'(Prev, New, TrUserData); + 'Etcd.AlarmMember' -> + 'merge_msg_Etcd.AlarmMember'(Prev, New, TrUserData); + 'Etcd.AlarmResponse' -> + 'merge_msg_Etcd.AlarmResponse'(Prev, New, TrUserData); + 'Etcd.StatusRequest' -> + 'merge_msg_Etcd.StatusRequest'(Prev, New, TrUserData); + 'Etcd.StatusResponse' -> + 'merge_msg_Etcd.StatusResponse'(Prev, New, TrUserData); + 'Etcd.AuthEnableRequest' -> + 'merge_msg_Etcd.AuthEnableRequest'(Prev, New, + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'merge_msg_Etcd.AuthDisableRequest'(Prev, New, + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'merge_msg_Etcd.AuthenticateRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'merge_msg_Etcd.AuthUserAddRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'merge_msg_Etcd.AuthUserGetRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'merge_msg_Etcd.AuthUserDeleteRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'merge_msg_Etcd.AuthUserChangePasswordRequest'(Prev, + New, TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'merge_msg_Etcd.AuthUserGrantRoleRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'merge_msg_Etcd.AuthUserRevokeRoleRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'merge_msg_Etcd.AuthRoleAddRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'merge_msg_Etcd.AuthRoleGetRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'merge_msg_Etcd.AuthUserListRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'merge_msg_Etcd.AuthRoleListRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'merge_msg_Etcd.AuthRoleDeleteRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'merge_msg_Etcd.AuthRoleGrantPermissionRequest'(Prev, + New, TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'merge_msg_Etcd.AuthRoleRevokePermissionRequest'(Prev, + New, TrUserData); + 'Etcd.AuthEnableResponse' -> + 'merge_msg_Etcd.AuthEnableResponse'(Prev, New, + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'merge_msg_Etcd.AuthDisableResponse'(Prev, New, + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'merge_msg_Etcd.AuthenticateResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'merge_msg_Etcd.AuthUserAddResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'merge_msg_Etcd.AuthUserGetResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'merge_msg_Etcd.AuthUserDeleteResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'merge_msg_Etcd.AuthUserChangePasswordResponse'(Prev, + New, TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'merge_msg_Etcd.AuthUserGrantRoleResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'merge_msg_Etcd.AuthUserRevokeRoleResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'merge_msg_Etcd.AuthRoleAddResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'merge_msg_Etcd.AuthRoleGetResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'merge_msg_Etcd.AuthRoleListResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'merge_msg_Etcd.AuthUserListResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'merge_msg_Etcd.AuthRoleDeleteResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'merge_msg_Etcd.AuthRoleGrantPermissionResponse'(Prev, + New, TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'merge_msg_Etcd.AuthRoleRevokePermissionResponse'(Prev, + New, TrUserData); + 'Etcd.HealthCheckRequest' -> + 'merge_msg_Etcd.HealthCheckRequest'(Prev, New, + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'merge_msg_Etcd.HealthCheckResponse'(Prev, New, + TrUserData); + 'Etcd.LockRequest' -> + 'merge_msg_Etcd.LockRequest'(Prev, New, TrUserData); + 'Etcd.LockResponse' -> + 'merge_msg_Etcd.LockResponse'(Prev, New, TrUserData); + 'Etcd.UnlockRequest' -> + 'merge_msg_Etcd.UnlockRequest'(Prev, New, TrUserData); + 'Etcd.UnlockResponse' -> + 'merge_msg_Etcd.UnlockResponse'(Prev, New, TrUserData); + 'Etcd.CampaignRequest' -> + 'merge_msg_Etcd.CampaignRequest'(Prev, New, TrUserData); + 'Etcd.CampaignResponse' -> + 'merge_msg_Etcd.CampaignResponse'(Prev, New, + TrUserData); + 'Etcd.LeaderKey' -> + 'merge_msg_Etcd.LeaderKey'(Prev, New, TrUserData); + 'Etcd.LeaderRequest' -> + 'merge_msg_Etcd.LeaderRequest'(Prev, New, TrUserData); + 'Etcd.LeaderResponse' -> + 'merge_msg_Etcd.LeaderResponse'(Prev, New, TrUserData); + 'Etcd.ResignRequest' -> + 'merge_msg_Etcd.ResignRequest'(Prev, New, TrUserData); + 'Etcd.ResignResponse' -> + 'merge_msg_Etcd.ResignResponse'(Prev, New, TrUserData); + 'Etcd.ProclaimRequest' -> + 'merge_msg_Etcd.ProclaimRequest'(Prev, New, TrUserData); + 'Etcd.ProclaimResponse' -> + 'merge_msg_Etcd.ProclaimResponse'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData); + 'mvccpb.KeyValue' -> + 'merge_msg_mvccpb.KeyValue'(Prev, New, TrUserData); + 'mvccpb.Event' -> + 'merge_msg_mvccpb.Event'(Prev, New, TrUserData); + 'authpb.UserAddOptions' -> + 'merge_msg_authpb.UserAddOptions'(Prev, New, + TrUserData); + 'authpb.User' -> + 'merge_msg_authpb.User'(Prev, New, TrUserData); + 'authpb.Permission' -> + 'merge_msg_authpb.Permission'(Prev, New, TrUserData); + 'authpb.Role' -> + 'merge_msg_authpb.Role'(Prev, New, TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResponseHeader'/3}). +'merge_msg_Etcd.ResponseHeader'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{cluster_id := NFcluster_id}} -> + S1#{cluster_id => NFcluster_id}; + {#{cluster_id := PFcluster_id}, _} -> + S1#{cluster_id => PFcluster_id}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{member_id := NFmember_id}} -> + S2#{member_id => NFmember_id}; + {#{member_id := PFmember_id}, _} -> + S2#{member_id => PFmember_id}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S3#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S3#{revision => PFrevision}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{raft_term := NFraft_term}} -> + S4#{raft_term => NFraft_term}; + {#{raft_term := PFraft_term}, _} -> + S4#{raft_term => PFraft_term}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RangeRequest'/3}). +'merge_msg_Etcd.RangeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{limit := NFlimit}} -> S3#{limit => NFlimit}; + {#{limit := PFlimit}, _} -> S3#{limit => PFlimit}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S4#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S4#{revision => PFrevision}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{sort_order := NFsort_order}} -> + S5#{sort_order => NFsort_order}; + {#{sort_order := PFsort_order}, _} -> + S5#{sort_order => PFsort_order}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{sort_target := NFsort_target}} -> + S6#{sort_target => NFsort_target}; + {#{sort_target := PFsort_target}, _} -> + S6#{sort_target => PFsort_target}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{serializable := NFserializable}} -> + S7#{serializable => NFserializable}; + {#{serializable := PFserializable}, _} -> + S7#{serializable => PFserializable}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{keys_only := NFkeys_only}} -> + S8#{keys_only => NFkeys_only}; + {#{keys_only := PFkeys_only}, _} -> + S8#{keys_only => PFkeys_only}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{count_only := NFcount_only}} -> + S9#{count_only => NFcount_only}; + {#{count_only := PFcount_only}, _} -> + S9#{count_only => PFcount_only}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{min_mod_revision := NFmin_mod_revision}} -> + S10#{min_mod_revision => NFmin_mod_revision}; + {#{min_mod_revision := PFmin_mod_revision}, _} -> + S10#{min_mod_revision => PFmin_mod_revision}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{max_mod_revision := NFmax_mod_revision}} -> + S11#{max_mod_revision => NFmax_mod_revision}; + {#{max_mod_revision := PFmax_mod_revision}, _} -> + S11#{max_mod_revision => PFmax_mod_revision}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{min_create_revision := NFmin_create_revision}} -> + S12#{min_create_revision => NFmin_create_revision}; + {#{min_create_revision := PFmin_create_revision}, _} -> + S12#{min_create_revision => PFmin_create_revision}; + _ -> S12 + end, + case {PMsg, NMsg} of + {_, #{max_create_revision := NFmax_create_revision}} -> + S13#{max_create_revision => NFmax_create_revision}; + {#{max_create_revision := PFmax_create_revision}, _} -> + S13#{max_create_revision => PFmax_create_revision}; + _ -> S13 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RangeResponse'/3}). +'merge_msg_Etcd.RangeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kvs := PFkvs}, #{kvs := NFkvs}} -> + S2#{kvs => 'erlang_++'(PFkvs, NFkvs, TrUserData)}; + {_, #{kvs := NFkvs}} -> S2#{kvs => NFkvs}; + {#{kvs := PFkvs}, _} -> S2#{kvs => PFkvs}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{more := NFmore}} -> S3#{more => NFmore}; + {#{more := PFmore}, _} -> S3#{more => PFmore}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{count := NFcount}} -> S4#{count => NFcount}; + {#{count := PFcount}, _} -> S4#{count => PFcount}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.PutRequest'/3}). +'merge_msg_Etcd.PutRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S3#{lease => NFlease}; + {#{lease := PFlease}, _} -> S3#{lease => PFlease}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S4#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S4#{prev_kv => PFprev_kv}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{ignore_value := NFignore_value}} -> + S5#{ignore_value => NFignore_value}; + {#{ignore_value := PFignore_value}, _} -> + S5#{ignore_value => PFignore_value}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{ignore_lease := NFignore_lease}} -> + S6#{ignore_lease => NFignore_lease}; + {#{ignore_lease := PFignore_lease}, _} -> + S6#{ignore_lease => PFignore_lease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.PutResponse'/3}). +'merge_msg_Etcd.PutResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S2#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S2#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S2#{prev_kv => PFprev_kv}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DeleteRangeRequest'/3}). +'merge_msg_Etcd.DeleteRangeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DeleteRangeResponse'/3}). +'merge_msg_Etcd.DeleteRangeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deleted := NFdeleted}} -> + S2#{deleted => NFdeleted}; + {#{deleted := PFdeleted}, _} -> + S2#{deleted => PFdeleted}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kvs := PFprev_kvs}, + #{prev_kvs := NFprev_kvs}} -> + S3#{prev_kvs => + 'erlang_++'(PFprev_kvs, NFprev_kvs, TrUserData)}; + {_, #{prev_kvs := NFprev_kvs}} -> + S3#{prev_kvs => NFprev_kvs}; + {#{prev_kvs := PFprev_kvs}, _} -> + S3#{prev_kvs => PFprev_kvs}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RequestOp'/3}). +'merge_msg_Etcd.RequestOp'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{request := {request_range, OPFrequest}}, + #{request := {request_range, ONFrequest}}} -> + S1#{request => + {request_range, + 'merge_msg_Etcd.RangeRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {#{request := {request_put, OPFrequest}}, + #{request := {request_put, ONFrequest}}} -> + S1#{request => + {request_put, + 'merge_msg_Etcd.PutRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {#{request := {request_delete_range, OPFrequest}}, + #{request := {request_delete_range, ONFrequest}}} -> + S1#{request => + {request_delete_range, + 'merge_msg_Etcd.DeleteRangeRequest'(OPFrequest, + ONFrequest, + TrUserData)}}; + {#{request := {request_txn, OPFrequest}}, + #{request := {request_txn, ONFrequest}}} -> + S1#{request => + {request_txn, + 'merge_msg_Etcd.TxnRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {_, #{request := NFrequest}} -> + S1#{request => NFrequest}; + {#{request := PFrequest}, _} -> + S1#{request => PFrequest}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResponseOp'/3}). +'merge_msg_Etcd.ResponseOp'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{response := {response_range, OPFresponse}}, + #{response := {response_range, ONFresponse}}} -> + S1#{response => + {response_range, + 'merge_msg_Etcd.RangeResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {#{response := {response_put, OPFresponse}}, + #{response := {response_put, ONFresponse}}} -> + S1#{response => + {response_put, + 'merge_msg_Etcd.PutResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {#{response := {response_delete_range, OPFresponse}}, + #{response := {response_delete_range, ONFresponse}}} -> + S1#{response => + {response_delete_range, + 'merge_msg_Etcd.DeleteRangeResponse'(OPFresponse, + ONFresponse, + TrUserData)}}; + {#{response := {response_txn, OPFresponse}}, + #{response := {response_txn, ONFresponse}}} -> + S1#{response => + {response_txn, + 'merge_msg_Etcd.TxnResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {_, #{response := NFresponse}} -> + S1#{response => NFresponse}; + {#{response := PFresponse}, _} -> + S1#{response => PFresponse}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.Compare'/3}). +'merge_msg_Etcd.Compare'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{result := NFresult}} -> S1#{result => NFresult}; + {#{result := PFresult}, _} -> S1#{result => PFresult}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{target := NFtarget}} -> S2#{target => NFtarget}; + {#{target := PFtarget}, _} -> S2#{target => PFtarget}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S3#{key => NFkey}; + {#{key := PFkey}, _} -> S3#{key => PFkey}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{target_union := NFtarget_union}} -> + S4#{target_union => NFtarget_union}; + {#{target_union := PFtarget_union}, _} -> + S4#{target_union => PFtarget_union}; + _ -> S4 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S5#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S5#{range_end => PFrange_end}; + _ -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.TxnRequest'/3}). +'merge_msg_Etcd.TxnRequest'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{compare := PFcompare}, #{compare := NFcompare}} -> + S1#{compare => + 'erlang_++'(PFcompare, NFcompare, TrUserData)}; + {_, #{compare := NFcompare}} -> + S1#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S1#{compare => PFcompare}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{success := PFsuccess}, #{success := NFsuccess}} -> + S2#{success => + 'erlang_++'(PFsuccess, NFsuccess, TrUserData)}; + {_, #{success := NFsuccess}} -> + S2#{success => NFsuccess}; + {#{success := PFsuccess}, _} -> + S2#{success => PFsuccess}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{failure := PFfailure}, #{failure := NFfailure}} -> + S3#{failure => + 'erlang_++'(PFfailure, NFfailure, TrUserData)}; + {_, #{failure := NFfailure}} -> + S3#{failure => NFfailure}; + {#{failure := PFfailure}, _} -> + S3#{failure => PFfailure}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.TxnResponse'/3}). +'merge_msg_Etcd.TxnResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{succeeded := NFsucceeded}} -> + S2#{succeeded => NFsucceeded}; + {#{succeeded := PFsucceeded}, _} -> + S2#{succeeded => PFsucceeded}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{responses := PFresponses}, + #{responses := NFresponses}} -> + S3#{responses => + 'erlang_++'(PFresponses, NFresponses, TrUserData)}; + {_, #{responses := NFresponses}} -> + S3#{responses => NFresponses}; + {#{responses := PFresponses}, _} -> + S3#{responses => PFresponses}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CompactionRequest'/3}). +'merge_msg_Etcd.CompactionRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S1#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S1#{revision => PFrevision}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{physical := NFphysical}} -> + S2#{physical => NFphysical}; + {#{physical := PFphysical}, _} -> + S2#{physical => PFphysical}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CompactionResponse'/3}). +'merge_msg_Etcd.CompactionResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashRequest'/3}). +'merge_msg_Etcd.HashRequest'(_Prev, New, _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashKVRequest'/3}). +'merge_msg_Etcd.HashKVRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S1#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S1#{revision => PFrevision}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashKVResponse'/3}). +'merge_msg_Etcd.HashKVResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{hash := NFhash}} -> S2#{hash => NFhash}; + {#{hash := PFhash}, _} -> S2#{hash => PFhash}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{compact_revision := NFcompact_revision}} -> + S3#{compact_revision => NFcompact_revision}; + {#{compact_revision := PFcompact_revision}, _} -> + S3#{compact_revision => PFcompact_revision}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashResponse'/3}). +'merge_msg_Etcd.HashResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{hash := NFhash}} -> S2#{hash => NFhash}; + {#{hash := PFhash}, _} -> S2#{hash => PFhash}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.SnapshotRequest'/3}). +'merge_msg_Etcd.SnapshotRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.SnapshotResponse'/3}). +'merge_msg_Etcd.SnapshotResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{remaining_bytes := NFremaining_bytes}} -> + S2#{remaining_bytes => NFremaining_bytes}; + {#{remaining_bytes := PFremaining_bytes}, _} -> + S2#{remaining_bytes => PFremaining_bytes}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{blob := NFblob}} -> S3#{blob => NFblob}; + {#{blob := PFblob}, _} -> S3#{blob => PFblob}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchRequest'/3}). +'merge_msg_Etcd.WatchRequest'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{request_union := {create_request, OPFrequest_union}}, + #{request_union := + {create_request, ONFrequest_union}}} -> + S1#{request_union => + {create_request, + 'merge_msg_Etcd.WatchCreateRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {#{request_union := {cancel_request, OPFrequest_union}}, + #{request_union := + {cancel_request, ONFrequest_union}}} -> + S1#{request_union => + {cancel_request, + 'merge_msg_Etcd.WatchCancelRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {#{request_union := + {progress_request, OPFrequest_union}}, + #{request_union := + {progress_request, ONFrequest_union}}} -> + S1#{request_union => + {progress_request, + 'merge_msg_Etcd.WatchProgressRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {_, #{request_union := NFrequest_union}} -> + S1#{request_union => NFrequest_union}; + {#{request_union := PFrequest_union}, _} -> + S1#{request_union => PFrequest_union}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchCreateRequest'/3}). +'merge_msg_Etcd.WatchCreateRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{start_revision := NFstart_revision}} -> + S3#{start_revision => NFstart_revision}; + {#{start_revision := PFstart_revision}, _} -> + S3#{start_revision => PFstart_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{progress_notify := NFprogress_notify}} -> + S4#{progress_notify => NFprogress_notify}; + {#{progress_notify := PFprogress_notify}, _} -> + S4#{progress_notify => PFprogress_notify}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{filters := PFfilters}, #{filters := NFfilters}} -> + S5#{filters => + 'erlang_++'(PFfilters, NFfilters, TrUserData)}; + {_, #{filters := NFfilters}} -> + S5#{filters => NFfilters}; + {#{filters := PFfilters}, _} -> + S5#{filters => PFfilters}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S6#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S6#{prev_kv => PFprev_kv}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S7#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S7#{watch_id => PFwatch_id}; + _ -> S7 + end, + case {PMsg, NMsg} of + {_, #{fragment := NFfragment}} -> + S8#{fragment => NFfragment}; + {#{fragment := PFfragment}, _} -> + S8#{fragment => PFfragment}; + _ -> S8 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchCancelRequest'/3}). +'merge_msg_Etcd.WatchCancelRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S1#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S1#{watch_id => PFwatch_id}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchProgressRequest'/3}). +'merge_msg_Etcd.WatchProgressRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchResponse'/3}). +'merge_msg_Etcd.WatchResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S2#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S2#{watch_id => PFwatch_id}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{created := NFcreated}} -> + S3#{created => NFcreated}; + {#{created := PFcreated}, _} -> + S3#{created => PFcreated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{canceled := NFcanceled}} -> + S4#{canceled => NFcanceled}; + {#{canceled := PFcanceled}, _} -> + S4#{canceled => PFcanceled}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{compact_revision := NFcompact_revision}} -> + S5#{compact_revision => NFcompact_revision}; + {#{compact_revision := PFcompact_revision}, _} -> + S5#{compact_revision => PFcompact_revision}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{cancel_reason := NFcancel_reason}} -> + S6#{cancel_reason => NFcancel_reason}; + {#{cancel_reason := PFcancel_reason}, _} -> + S6#{cancel_reason => PFcancel_reason}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{fragment := NFfragment}} -> + S7#{fragment => NFfragment}; + {#{fragment := PFfragment}, _} -> + S7#{fragment => PFfragment}; + _ -> S7 + end, + case {PMsg, NMsg} of + {#{events := PFevents}, #{events := NFevents}} -> + S8#{events => + 'erlang_++'(PFevents, NFevents, TrUserData)}; + {_, #{events := NFevents}} -> S8#{events => NFevents}; + {#{events := PFevents}, _} -> S8#{events => PFevents}; + {_, _} -> S8 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseGrantRequest'/3}). +'merge_msg_Etcd.LeaseGrantRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S1#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S1#{'TTL' => PFTTL}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseGrantResponse'/3}). +'merge_msg_Etcd.LeaseGrantResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{error := NFerror}} -> S4#{error => NFerror}; + {#{error := PFerror}, _} -> S4#{error => PFerror}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseRevokeRequest'/3}). +'merge_msg_Etcd.LeaseRevokeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseRevokeResponse'/3}). +'merge_msg_Etcd.LeaseRevokeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpoint'/3}). +'merge_msg_Etcd.LeaseCheckpoint'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{remaining_TTL := NFremaining_TTL}} -> + S2#{remaining_TTL => NFremaining_TTL}; + {#{remaining_TTL := PFremaining_TTL}, _} -> + S2#{remaining_TTL => PFremaining_TTL}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpointRequest'/3}). +'merge_msg_Etcd.LeaseCheckpointRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{checkpoints := PFcheckpoints}, + #{checkpoints := NFcheckpoints}} -> + S1#{checkpoints => + 'erlang_++'(PFcheckpoints, NFcheckpoints, TrUserData)}; + {_, #{checkpoints := NFcheckpoints}} -> + S1#{checkpoints => NFcheckpoints}; + {#{checkpoints := PFcheckpoints}, _} -> + S1#{checkpoints => PFcheckpoints}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpointResponse'/3}). +'merge_msg_Etcd.LeaseCheckpointResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseKeepAliveRequest'/3}). +'merge_msg_Etcd.LeaseKeepAliveRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseKeepAliveResponse'/3}). +'merge_msg_Etcd.LeaseKeepAliveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseTimeToLiveRequest'/3}). +'merge_msg_Etcd.LeaseTimeToLiveRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{keys := NFkeys}} -> S2#{keys => NFkeys}; + {#{keys := PFkeys}, _} -> S2#{keys => PFkeys}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseTimeToLiveResponse'/3}). +'merge_msg_Etcd.LeaseTimeToLiveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{grantedTTL := NFgrantedTTL}} -> + S4#{grantedTTL => NFgrantedTTL}; + {#{grantedTTL := PFgrantedTTL}, _} -> + S4#{grantedTTL => PFgrantedTTL}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{keys := PFkeys}, #{keys := NFkeys}} -> + S5#{keys => 'erlang_++'(PFkeys, NFkeys, TrUserData)}; + {_, #{keys := NFkeys}} -> S5#{keys => NFkeys}; + {#{keys := PFkeys}, _} -> S5#{keys => PFkeys}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseLeasesRequest'/3}). +'merge_msg_Etcd.LeaseLeasesRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseStatus'/3}). +'merge_msg_Etcd.LeaseStatus'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseLeasesResponse'/3}). +'merge_msg_Etcd.LeaseLeasesResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{leases := PFleases}, #{leases := NFleases}} -> + S2#{leases => + 'erlang_++'(PFleases, NFleases, TrUserData)}; + {_, #{leases := NFleases}} -> S2#{leases => NFleases}; + {#{leases := PFleases}, _} -> S2#{leases => PFleases}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.Member'/3}). +'merge_msg_Etcd.Member'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S2#{name => NFname}; + {#{name := PFname}, _} -> S2#{name => PFname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S3#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S3#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S3#{peerURLs => PFpeerURLs}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{clientURLs := PFclientURLs}, + #{clientURLs := NFclientURLs}} -> + S4#{clientURLs => + 'erlang_++'(PFclientURLs, NFclientURLs, TrUserData)}; + {_, #{clientURLs := NFclientURLs}} -> + S4#{clientURLs => NFclientURLs}; + {#{clientURLs := PFclientURLs}, _} -> + S4#{clientURLs => PFclientURLs}; + {_, _} -> S4 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S5#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S5#{isLearner => PFisLearner}; + _ -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberAddRequest'/3}). +'merge_msg_Etcd.MemberAddRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S1#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S1#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S1#{peerURLs => PFpeerURLs}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S2#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S2#{isLearner => PFisLearner}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberAddResponse'/3}). +'merge_msg_Etcd.MemberAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{member := PFmember}, #{member := NFmember}} -> + S2#{member => + 'merge_msg_Etcd.Member'(PFmember, NFmember, + TrUserData)}; + {_, #{member := NFmember}} -> S2#{member => NFmember}; + {#{member := PFmember}, _} -> S2#{member => PFmember}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S3#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S3#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S3#{members => PFmembers}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberRemoveRequest'/3}). +'merge_msg_Etcd.MemberRemoveRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberRemoveResponse'/3}). +'merge_msg_Etcd.MemberRemoveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberUpdateRequest'/3}). +'merge_msg_Etcd.MemberUpdateRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S2#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S2#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S2#{peerURLs => PFpeerURLs}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberUpdateResponse'/3}). +'merge_msg_Etcd.MemberUpdateResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberListRequest'/3}). +'merge_msg_Etcd.MemberListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberListResponse'/3}). +'merge_msg_Etcd.MemberListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberPromoteRequest'/3}). +'merge_msg_Etcd.MemberPromoteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberPromoteResponse'/3}). +'merge_msg_Etcd.MemberPromoteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DefragmentRequest'/3}). +'merge_msg_Etcd.DefragmentRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DefragmentResponse'/3}). +'merge_msg_Etcd.DefragmentResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MoveLeaderRequest'/3}). +'merge_msg_Etcd.MoveLeaderRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{targetID := NFtargetID}} -> + S1#{targetID => NFtargetID}; + {#{targetID := PFtargetID}, _} -> + S1#{targetID => PFtargetID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MoveLeaderResponse'/3}). +'merge_msg_Etcd.MoveLeaderResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmRequest'/3}). +'merge_msg_Etcd.AlarmRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{action := NFaction}} -> S1#{action => NFaction}; + {#{action := PFaction}, _} -> S1#{action => PFaction}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{memberID := NFmemberID}} -> + S2#{memberID => NFmemberID}; + {#{memberID := PFmemberID}, _} -> + S2#{memberID => PFmemberID}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{alarm := NFalarm}} -> S3#{alarm => NFalarm}; + {#{alarm := PFalarm}, _} -> S3#{alarm => PFalarm}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmMember'/3}). +'merge_msg_Etcd.AlarmMember'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{memberID := NFmemberID}} -> + S1#{memberID => NFmemberID}; + {#{memberID := PFmemberID}, _} -> + S1#{memberID => PFmemberID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{alarm := NFalarm}} -> S2#{alarm => NFalarm}; + {#{alarm := PFalarm}, _} -> S2#{alarm => PFalarm}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmResponse'/3}). +'merge_msg_Etcd.AlarmResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{alarms := PFalarms}, #{alarms := NFalarms}} -> + S2#{alarms => + 'erlang_++'(PFalarms, NFalarms, TrUserData)}; + {_, #{alarms := NFalarms}} -> S2#{alarms => NFalarms}; + {#{alarms := PFalarms}, _} -> S2#{alarms => PFalarms}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.StatusRequest'/3}). +'merge_msg_Etcd.StatusRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.StatusResponse'/3}). +'merge_msg_Etcd.StatusResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S2#{version => NFversion}; + {#{version := PFversion}, _} -> + S2#{version => PFversion}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{dbSize := NFdbSize}} -> S3#{dbSize => NFdbSize}; + {#{dbSize := PFdbSize}, _} -> S3#{dbSize => PFdbSize}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{leader := NFleader}} -> S4#{leader => NFleader}; + {#{leader := PFleader}, _} -> S4#{leader => PFleader}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{raftIndex := NFraftIndex}} -> + S5#{raftIndex => NFraftIndex}; + {#{raftIndex := PFraftIndex}, _} -> + S5#{raftIndex => PFraftIndex}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{raftTerm := NFraftTerm}} -> + S6#{raftTerm => NFraftTerm}; + {#{raftTerm := PFraftTerm}, _} -> + S6#{raftTerm => PFraftTerm}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{raftAppliedIndex := NFraftAppliedIndex}} -> + S7#{raftAppliedIndex => NFraftAppliedIndex}; + {#{raftAppliedIndex := PFraftAppliedIndex}, _} -> + S7#{raftAppliedIndex => PFraftAppliedIndex}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{errors := PFerrors}, #{errors := NFerrors}} -> + S8#{errors => + 'erlang_++'(PFerrors, NFerrors, TrUserData)}; + {_, #{errors := NFerrors}} -> S8#{errors => NFerrors}; + {#{errors := PFerrors}, _} -> S8#{errors => PFerrors}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{dbSizeInUse := NFdbSizeInUse}} -> + S9#{dbSizeInUse => NFdbSizeInUse}; + {#{dbSizeInUse := PFdbSizeInUse}, _} -> + S9#{dbSizeInUse => PFdbSizeInUse}; + _ -> S9 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S10#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S10#{isLearner => PFisLearner}; + _ -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthEnableRequest'/3}). +'merge_msg_Etcd.AuthEnableRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthDisableRequest'/3}). +'merge_msg_Etcd.AuthDisableRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthenticateRequest'/3}). +'merge_msg_Etcd.AuthenticateRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserAddRequest'/3}). +'merge_msg_Etcd.AuthUserAddRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGetRequest'/3}). +'merge_msg_Etcd.AuthUserGetRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserDeleteRequest'/3}). +'merge_msg_Etcd.AuthUserDeleteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserChangePasswordRequest'/3}). +'merge_msg_Etcd.AuthUserChangePasswordRequest'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGrantRoleRequest'/3}). +'merge_msg_Etcd.AuthUserGrantRoleRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{user := NFuser}} -> S1#{user => NFuser}; + {#{user := PFuser}, _} -> S1#{user => PFuser}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S2#{role => NFrole}; + {#{role := PFrole}, _} -> S2#{role => PFrole}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +'merge_msg_Etcd.AuthUserRevokeRoleRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S2#{role => NFrole}; + {#{role := PFrole}, _} -> S2#{role => PFrole}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleAddRequest'/3}). +'merge_msg_Etcd.AuthRoleAddRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGetRequest'/3}). +'merge_msg_Etcd.AuthRoleGetRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserListRequest'/3}). +'merge_msg_Etcd.AuthUserListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleListRequest'/3}). +'merge_msg_Etcd.AuthRoleListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleDeleteRequest'/3}). +'merge_msg_Etcd.AuthRoleDeleteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +'merge_msg_Etcd.AuthRoleGrantPermissionRequest'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{perm := PFperm}, #{perm := NFperm}} -> + S2#{perm => + 'merge_msg_authpb.Permission'(PFperm, NFperm, + TrUserData)}; + {_, #{perm := NFperm}} -> S2#{perm => NFperm}; + {#{perm := PFperm}, _} -> S2#{perm => PFperm}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +'merge_msg_Etcd.AuthRoleRevokePermissionRequest'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthEnableResponse'/3}). +'merge_msg_Etcd.AuthEnableResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthDisableResponse'/3}). +'merge_msg_Etcd.AuthDisableResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthenticateResponse'/3}). +'merge_msg_Etcd.AuthenticateResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{token := NFtoken}} -> S2#{token => NFtoken}; + {#{token := PFtoken}, _} -> S2#{token => PFtoken}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserAddResponse'/3}). +'merge_msg_Etcd.AuthUserAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGetResponse'/3}). +'merge_msg_Etcd.AuthUserGetResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S2#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S2#{roles => NFroles}; + {#{roles := PFroles}, _} -> S2#{roles => PFroles}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserDeleteResponse'/3}). +'merge_msg_Etcd.AuthUserDeleteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserChangePasswordResponse'/3}). +'merge_msg_Etcd.AuthUserChangePasswordResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGrantRoleResponse'/3}). +'merge_msg_Etcd.AuthUserGrantRoleResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +'merge_msg_Etcd.AuthUserRevokeRoleResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleAddResponse'/3}). +'merge_msg_Etcd.AuthRoleAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGetResponse'/3}). +'merge_msg_Etcd.AuthRoleGetResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{perm := PFperm}, #{perm := NFperm}} -> + S2#{perm => 'erlang_++'(PFperm, NFperm, TrUserData)}; + {_, #{perm := NFperm}} -> S2#{perm => NFperm}; + {#{perm := PFperm}, _} -> S2#{perm => PFperm}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleListResponse'/3}). +'merge_msg_Etcd.AuthRoleListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S2#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S2#{roles => NFroles}; + {#{roles := PFroles}, _} -> S2#{roles => PFroles}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserListResponse'/3}). +'merge_msg_Etcd.AuthUserListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{users := PFusers}, #{users := NFusers}} -> + S2#{users => 'erlang_++'(PFusers, NFusers, TrUserData)}; + {_, #{users := NFusers}} -> S2#{users => NFusers}; + {#{users := PFusers}, _} -> S2#{users => PFusers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleDeleteResponse'/3}). +'merge_msg_Etcd.AuthRoleDeleteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +'merge_msg_Etcd.AuthRoleGrantPermissionResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +'merge_msg_Etcd.AuthRoleRevokePermissionResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HealthCheckRequest'/3}). +'merge_msg_Etcd.HealthCheckRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{service := NFservice}} -> + S1#{service => NFservice}; + {#{service := PFservice}, _} -> + S1#{service => PFservice}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HealthCheckResponse'/3}). +'merge_msg_Etcd.HealthCheckResponse'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{status := NFstatus}} -> S1#{status => NFstatus}; + {#{status := PFstatus}, _} -> S1#{status => PFstatus}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LockRequest'/3}). +'merge_msg_Etcd.LockRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S2#{lease => NFlease}; + {#{lease := PFlease}, _} -> S2#{lease => PFlease}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LockResponse'/3}). +'merge_msg_Etcd.LockResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.UnlockRequest'/3}). +'merge_msg_Etcd.UnlockRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.UnlockResponse'/3}). +'merge_msg_Etcd.UnlockResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CampaignRequest'/3}). +'merge_msg_Etcd.CampaignRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S2#{lease => NFlease}; + {#{lease := PFlease}, _} -> S2#{lease => PFlease}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S3#{value => NFvalue}; + {#{value := PFvalue}, _} -> S3#{value => PFvalue}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CampaignResponse'/3}). +'merge_msg_Etcd.CampaignResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S2#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S2#{leader => NFleader}; + {#{leader := PFleader}, _} -> S2#{leader => PFleader}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderKey'/3}). +'merge_msg_Etcd.LeaderKey'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{rev := NFrev}} -> S3#{rev => NFrev}; + {#{rev := PFrev}, _} -> S3#{rev => PFrev}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S4#{lease => NFlease}; + {#{lease := PFlease}, _} -> S4#{lease => PFlease}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderRequest'/3}). +'merge_msg_Etcd.LeaderRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderResponse'/3}). +'merge_msg_Etcd.LeaderResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResignRequest'/3}). +'merge_msg_Etcd.ResignRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S1#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S1#{leader => NFleader}; + {#{leader := PFleader}, _} -> S1#{leader => PFleader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResignResponse'/3}). +'merge_msg_Etcd.ResignResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ProclaimRequest'/3}). +'merge_msg_Etcd.ProclaimRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S1#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S1#{leader => NFleader}; + {#{leader := PFleader}, _} -> S1#{leader => PFleader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ProclaimResponse'/3}). +'merge_msg_Etcd.ProclaimResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.KeyValue'/3}). +'merge_msg_mvccpb.KeyValue'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{create_revision := NFcreate_revision}} -> + S2#{create_revision => NFcreate_revision}; + {#{create_revision := PFcreate_revision}, _} -> + S2#{create_revision => PFcreate_revision}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{mod_revision := NFmod_revision}} -> + S3#{mod_revision => NFmod_revision}; + {#{mod_revision := PFmod_revision}, _} -> + S3#{mod_revision => PFmod_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S4#{version => NFversion}; + {#{version := PFversion}, _} -> + S4#{version => PFversion}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S5#{value => NFvalue}; + {#{value := PFvalue}, _} -> S5#{value => PFvalue}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S6#{lease => NFlease}; + {#{lease := PFlease}, _} -> S6#{lease => PFlease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.Event'/3}). +'merge_msg_mvccpb.Event'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S1#{type => NFtype}; + {#{type := PFtype}, _} -> S1#{type => PFtype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.UserAddOptions'/3}). +'merge_msg_authpb.UserAddOptions'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{no_password := NFno_password}} -> + S1#{no_password => NFno_password}; + {#{no_password := PFno_password}, _} -> + S1#{no_password => PFno_password}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.User'/3}). +'merge_msg_authpb.User'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S3#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S3#{roles => NFroles}; + {#{roles := PFroles}, _} -> S3#{roles => PFroles}; + {_, _} -> S3 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Permission'/3}). +'merge_msg_authpb.Permission'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{permType := NFpermType}} -> + S1#{permType => NFpermType}; + {#{permType := PFpermType}, _} -> + S1#{permType => PFpermType}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Role'/3}). +'merge_msg_authpb.Role'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{keyPermission := PFkeyPermission}, + #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => + 'erlang_++'(PFkeyPermission, NFkeyPermission, + TrUserData)}; + {_, #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => NFkeyPermission}; + {#{keyPermission := PFkeyPermission}, _} -> + S2#{keyPermission => PFkeyPermission}; + {_, _} -> S2 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'v_msg_Etcd.ResponseHeader'(Msg, [MsgName], TrUserData); + 'Etcd.RangeRequest' -> + 'v_msg_Etcd.RangeRequest'(Msg, [MsgName], TrUserData); + 'Etcd.RangeResponse' -> + 'v_msg_Etcd.RangeResponse'(Msg, [MsgName], TrUserData); + 'Etcd.PutRequest' -> + 'v_msg_Etcd.PutRequest'(Msg, [MsgName], TrUserData); + 'Etcd.PutResponse' -> + 'v_msg_Etcd.PutResponse'(Msg, [MsgName], TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'v_msg_Etcd.DeleteRangeRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'v_msg_Etcd.DeleteRangeResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.RequestOp' -> + 'v_msg_Etcd.RequestOp'(Msg, [MsgName], TrUserData); + 'Etcd.ResponseOp' -> + 'v_msg_Etcd.ResponseOp'(Msg, [MsgName], TrUserData); + 'Etcd.Compare' -> + 'v_msg_Etcd.Compare'(Msg, [MsgName], TrUserData); + 'Etcd.TxnRequest' -> + 'v_msg_Etcd.TxnRequest'(Msg, [MsgName], TrUserData); + 'Etcd.TxnResponse' -> + 'v_msg_Etcd.TxnResponse'(Msg, [MsgName], TrUserData); + 'Etcd.CompactionRequest' -> + 'v_msg_Etcd.CompactionRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.CompactionResponse' -> + 'v_msg_Etcd.CompactionResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.HashRequest' -> + 'v_msg_Etcd.HashRequest'(Msg, [MsgName], TrUserData); + 'Etcd.HashKVRequest' -> + 'v_msg_Etcd.HashKVRequest'(Msg, [MsgName], TrUserData); + 'Etcd.HashKVResponse' -> + 'v_msg_Etcd.HashKVResponse'(Msg, [MsgName], TrUserData); + 'Etcd.HashResponse' -> + 'v_msg_Etcd.HashResponse'(Msg, [MsgName], TrUserData); + 'Etcd.SnapshotRequest' -> + 'v_msg_Etcd.SnapshotRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.SnapshotResponse' -> + 'v_msg_Etcd.SnapshotResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchRequest' -> + 'v_msg_Etcd.WatchRequest'(Msg, [MsgName], TrUserData); + 'Etcd.WatchCreateRequest' -> + 'v_msg_Etcd.WatchCreateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'v_msg_Etcd.WatchCancelRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'v_msg_Etcd.WatchProgressRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchResponse' -> + 'v_msg_Etcd.WatchResponse'(Msg, [MsgName], TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'v_msg_Etcd.LeaseGrantRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'v_msg_Etcd.LeaseGrantResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'v_msg_Etcd.LeaseRevokeRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'v_msg_Etcd.LeaseRevokeResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'v_msg_Etcd.LeaseCheckpoint'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'v_msg_Etcd.LeaseCheckpointRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'v_msg_Etcd.LeaseCheckpointResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'v_msg_Etcd.LeaseKeepAliveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'v_msg_Etcd.LeaseKeepAliveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'v_msg_Etcd.LeaseTimeToLiveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'v_msg_Etcd.LeaseTimeToLiveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'v_msg_Etcd.LeaseLeasesRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseStatus' -> + 'v_msg_Etcd.LeaseStatus'(Msg, [MsgName], TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'v_msg_Etcd.LeaseLeasesResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.Member' -> + 'v_msg_Etcd.Member'(Msg, [MsgName], TrUserData); + 'Etcd.MemberAddRequest' -> + 'v_msg_Etcd.MemberAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberAddResponse' -> + 'v_msg_Etcd.MemberAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'v_msg_Etcd.MemberRemoveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'v_msg_Etcd.MemberRemoveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'v_msg_Etcd.MemberUpdateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'v_msg_Etcd.MemberUpdateResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberListRequest' -> + 'v_msg_Etcd.MemberListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberListResponse' -> + 'v_msg_Etcd.MemberListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'v_msg_Etcd.MemberPromoteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'v_msg_Etcd.MemberPromoteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.DefragmentRequest' -> + 'v_msg_Etcd.DefragmentRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.DefragmentResponse' -> + 'v_msg_Etcd.DefragmentResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'v_msg_Etcd.MoveLeaderRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'v_msg_Etcd.MoveLeaderResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AlarmRequest' -> + 'v_msg_Etcd.AlarmRequest'(Msg, [MsgName], TrUserData); + 'Etcd.AlarmMember' -> + 'v_msg_Etcd.AlarmMember'(Msg, [MsgName], TrUserData); + 'Etcd.AlarmResponse' -> + 'v_msg_Etcd.AlarmResponse'(Msg, [MsgName], TrUserData); + 'Etcd.StatusRequest' -> + 'v_msg_Etcd.StatusRequest'(Msg, [MsgName], TrUserData); + 'Etcd.StatusResponse' -> + 'v_msg_Etcd.StatusResponse'(Msg, [MsgName], TrUserData); + 'Etcd.AuthEnableRequest' -> + 'v_msg_Etcd.AuthEnableRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'v_msg_Etcd.AuthDisableRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'v_msg_Etcd.AuthenticateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'v_msg_Etcd.AuthUserAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'v_msg_Etcd.AuthUserGetRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'v_msg_Etcd.AuthUserDeleteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'v_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'v_msg_Etcd.AuthUserGrantRoleRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'v_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'v_msg_Etcd.AuthRoleAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'v_msg_Etcd.AuthRoleGetRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'v_msg_Etcd.AuthUserListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'v_msg_Etcd.AuthRoleListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'v_msg_Etcd.AuthRoleDeleteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'v_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'v_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthEnableResponse' -> + 'v_msg_Etcd.AuthEnableResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'v_msg_Etcd.AuthDisableResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'v_msg_Etcd.AuthenticateResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'v_msg_Etcd.AuthUserAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'v_msg_Etcd.AuthUserGetResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'v_msg_Etcd.AuthUserDeleteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'v_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'v_msg_Etcd.AuthUserGrantRoleResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'v_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'v_msg_Etcd.AuthRoleAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'v_msg_Etcd.AuthRoleGetResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'v_msg_Etcd.AuthRoleListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'v_msg_Etcd.AuthUserListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'v_msg_Etcd.AuthRoleDeleteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'v_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'v_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.HealthCheckRequest' -> + 'v_msg_Etcd.HealthCheckRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'v_msg_Etcd.HealthCheckResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LockRequest' -> + 'v_msg_Etcd.LockRequest'(Msg, [MsgName], TrUserData); + 'Etcd.LockResponse' -> + 'v_msg_Etcd.LockResponse'(Msg, [MsgName], TrUserData); + 'Etcd.UnlockRequest' -> + 'v_msg_Etcd.UnlockRequest'(Msg, [MsgName], TrUserData); + 'Etcd.UnlockResponse' -> + 'v_msg_Etcd.UnlockResponse'(Msg, [MsgName], TrUserData); + 'Etcd.CampaignRequest' -> + 'v_msg_Etcd.CampaignRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.CampaignResponse' -> + 'v_msg_Etcd.CampaignResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaderKey' -> + 'v_msg_Etcd.LeaderKey'(Msg, [MsgName], TrUserData); + 'Etcd.LeaderRequest' -> + 'v_msg_Etcd.LeaderRequest'(Msg, [MsgName], TrUserData); + 'Etcd.LeaderResponse' -> + 'v_msg_Etcd.LeaderResponse'(Msg, [MsgName], TrUserData); + 'Etcd.ResignRequest' -> + 'v_msg_Etcd.ResignRequest'(Msg, [MsgName], TrUserData); + 'Etcd.ResignResponse' -> + 'v_msg_Etcd.ResignResponse'(Msg, [MsgName], TrUserData); + 'Etcd.ProclaimRequest' -> + 'v_msg_Etcd.ProclaimRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.ProclaimResponse' -> + 'v_msg_Etcd.ProclaimResponse'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + 'mvccpb.KeyValue' -> + 'v_msg_mvccpb.KeyValue'(Msg, [MsgName], TrUserData); + 'mvccpb.Event' -> + 'v_msg_mvccpb.Event'(Msg, [MsgName], TrUserData); + 'authpb.UserAddOptions' -> + 'v_msg_authpb.UserAddOptions'(Msg, [MsgName], + TrUserData); + 'authpb.User' -> + 'v_msg_authpb.User'(Msg, [MsgName], TrUserData); + 'authpb.Permission' -> + 'v_msg_authpb.Permission'(Msg, [MsgName], TrUserData); + 'authpb.Role' -> + 'v_msg_authpb.Role'(Msg, [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_Etcd.ResponseHeader'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResponseHeader'/3}). +'v_msg_Etcd.ResponseHeader'(#{} = M, Path, + TrUserData) -> + case M of + #{cluster_id := F1} -> + v_type_uint64(F1, [cluster_id | Path], TrUserData); + _ -> ok + end, + case M of + #{member_id := F2} -> + v_type_uint64(F2, [member_id | Path], TrUserData); + _ -> ok + end, + case M of + #{revision := F3} -> + v_type_int64(F3, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{raft_term := F4} -> + v_type_uint64(F4, [raft_term | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (cluster_id) -> ok; + (member_id) -> ok; + (revision) -> ok; + (raft_term) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResponseHeader'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResponseHeader'}, + M, Path); +'v_msg_Etcd.ResponseHeader'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResponseHeader'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RangeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RangeRequest'/3}). +'v_msg_Etcd.RangeRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{limit := F3} -> + v_type_int64(F3, [limit | Path], TrUserData); + _ -> ok + end, + case M of + #{revision := F4} -> + v_type_int64(F4, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{sort_order := F5} -> + 'v_enum_Etcd.RangeRequest.SortOrder'(F5, + [sort_order | Path], TrUserData); + _ -> ok + end, + case M of + #{sort_target := F6} -> + 'v_enum_Etcd.RangeRequest.SortTarget'(F6, + [sort_target | Path], + TrUserData); + _ -> ok + end, + case M of + #{serializable := F7} -> + v_type_bool(F7, [serializable | Path], TrUserData); + _ -> ok + end, + case M of + #{keys_only := F8} -> + v_type_bool(F8, [keys_only | Path], TrUserData); + _ -> ok + end, + case M of + #{count_only := F9} -> + v_type_bool(F9, [count_only | Path], TrUserData); + _ -> ok + end, + case M of + #{min_mod_revision := F10} -> + v_type_int64(F10, [min_mod_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{max_mod_revision := F11} -> + v_type_int64(F11, [max_mod_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{min_create_revision := F12} -> + v_type_int64(F12, [min_create_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{max_create_revision := F13} -> + v_type_int64(F13, [max_create_revision | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (limit) -> ok; + (revision) -> ok; + (sort_order) -> ok; + (sort_target) -> ok; + (serializable) -> ok; + (keys_only) -> ok; + (count_only) -> ok; + (min_mod_revision) -> ok; + (max_mod_revision) -> ok; + (min_create_revision) -> ok; + (max_create_revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RangeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RangeRequest'}, + M, Path); +'v_msg_Etcd.RangeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RangeRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RangeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RangeResponse'/3}). +'v_msg_Etcd.RangeResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{kvs := F2} -> + if is_list(F2) -> + _ = ['v_msg_mvccpb.KeyValue'(Elem, [kvs | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'mvccpb.KeyValue'}}, + F2, [kvs | Path]) + end; + _ -> ok + end, + case M of + #{more := F3} -> + v_type_bool(F3, [more | Path], TrUserData); + _ -> ok + end, + case M of + #{count := F4} -> + v_type_int64(F4, [count | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (kvs) -> ok; + (more) -> ok; + (count) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RangeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RangeResponse'}, + M, Path); +'v_msg_Etcd.RangeResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RangeResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.PutRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.PutRequest'/3}). +'v_msg_Etcd.PutRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + v_type_bytes(F2, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F3} -> + v_type_int64(F3, [lease | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F4} -> + v_type_bool(F4, [prev_kv | Path], TrUserData); + _ -> ok + end, + case M of + #{ignore_value := F5} -> + v_type_bool(F5, [ignore_value | Path], TrUserData); + _ -> ok + end, + case M of + #{ignore_lease := F6} -> + v_type_bool(F6, [ignore_lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (value) -> ok; + (lease) -> ok; + (prev_kv) -> ok; + (ignore_value) -> ok; + (ignore_lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.PutRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.PutRequest'}, + M, Path); +'v_msg_Etcd.PutRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.PutRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.PutResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.PutResponse'/3}). +'v_msg_Etcd.PutResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.PutResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.PutResponse'}, + M, Path); +'v_msg_Etcd.PutResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.PutResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DeleteRangeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DeleteRangeRequest'/3}). +'v_msg_Etcd.DeleteRangeRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + v_type_bool(F3, [prev_kv | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DeleteRangeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DeleteRangeRequest'}, + M, Path); +'v_msg_Etcd.DeleteRangeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DeleteRangeRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DeleteRangeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DeleteRangeResponse'/3}). +'v_msg_Etcd.DeleteRangeResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{deleted := F2} -> + v_type_int64(F2, [deleted | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kvs := F3} -> + if is_list(F3) -> + _ = ['v_msg_mvccpb.KeyValue'(Elem, [prev_kvs | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'mvccpb.KeyValue'}}, + F3, [prev_kvs | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (deleted) -> ok; + (prev_kvs) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DeleteRangeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DeleteRangeResponse'}, + M, Path); +'v_msg_Etcd.DeleteRangeResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.DeleteRangeResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RequestOp'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RequestOp'/3}). +'v_msg_Etcd.RequestOp'(#{} = M, Path, TrUserData) -> + case M of + #{request := {request_range, OF1}} -> + 'v_msg_Etcd.RangeRequest'(OF1, + [request_range, request | Path], + TrUserData); + #{request := {request_put, OF1}} -> + 'v_msg_Etcd.PutRequest'(OF1, + [request_put, request | Path], TrUserData); + #{request := {request_delete_range, OF1}} -> + 'v_msg_Etcd.DeleteRangeRequest'(OF1, + [request_delete_range, request + | Path], + TrUserData); + #{request := {request_txn, OF1}} -> + 'v_msg_Etcd.TxnRequest'(OF1, + [request_txn, request | Path], TrUserData); + #{request := F1} -> + mk_type_error(invalid_oneof, F1, [request | Path]); + _ -> ok + end, + lists:foreach(fun (request) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RequestOp'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RequestOp'}, + M, Path); +'v_msg_Etcd.RequestOp'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RequestOp'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResponseOp'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResponseOp'/3}). +'v_msg_Etcd.ResponseOp'(#{} = M, Path, TrUserData) -> + case M of + #{response := {response_range, OF1}} -> + 'v_msg_Etcd.RangeResponse'(OF1, + [response_range, response | Path], + TrUserData); + #{response := {response_put, OF1}} -> + 'v_msg_Etcd.PutResponse'(OF1, + [response_put, response | Path], TrUserData); + #{response := {response_delete_range, OF1}} -> + 'v_msg_Etcd.DeleteRangeResponse'(OF1, + [response_delete_range, response + | Path], + TrUserData); + #{response := {response_txn, OF1}} -> + 'v_msg_Etcd.TxnResponse'(OF1, + [response_txn, response | Path], TrUserData); + #{response := F1} -> + mk_type_error(invalid_oneof, F1, [response | Path]); + _ -> ok + end, + lists:foreach(fun (response) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResponseOp'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResponseOp'}, + M, Path); +'v_msg_Etcd.ResponseOp'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResponseOp'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.Compare'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.Compare'/3}). +'v_msg_Etcd.Compare'(#{} = M, Path, TrUserData) -> + case M of + #{result := F1} -> + 'v_enum_Etcd.Compare.CompareResult'(F1, [result | Path], + TrUserData); + _ -> ok + end, + case M of + #{target := F2} -> + 'v_enum_Etcd.Compare.CompareTarget'(F2, [target | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F3} -> + v_type_bytes(F3, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{target_union := {version, OF4}} -> + v_type_int64(OF4, [version, target_union | Path], + TrUserData); + #{target_union := {create_revision, OF4}} -> + v_type_int64(OF4, + [create_revision, target_union | Path], TrUserData); + #{target_union := {mod_revision, OF4}} -> + v_type_int64(OF4, [mod_revision, target_union | Path], + TrUserData); + #{target_union := {value, OF4}} -> + v_type_bytes(OF4, [value, target_union | Path], + TrUserData); + #{target_union := {lease, OF4}} -> + v_type_int64(OF4, [lease, target_union | Path], + TrUserData); + #{target_union := F4} -> + mk_type_error(invalid_oneof, F4, [target_union | Path]); + _ -> ok + end, + case M of + #{range_end := F5} -> + v_type_bytes(F5, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (result) -> ok; + (target) -> ok; + (key) -> ok; + (target_union) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.Compare'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.Compare'}, + M, Path); +'v_msg_Etcd.Compare'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.Compare'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.TxnRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.TxnRequest'/3}). +'v_msg_Etcd.TxnRequest'(#{} = M, Path, TrUserData) -> + case M of + #{compare := F1} -> + if is_list(F1) -> + _ = ['v_msg_Etcd.Compare'(Elem, [compare | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Compare'}}, + F1, [compare | Path]) + end; + _ -> ok + end, + case M of + #{success := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.RequestOp'(Elem, [success | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.RequestOp'}}, + F2, [success | Path]) + end; + _ -> ok + end, + case M of + #{failure := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.RequestOp'(Elem, [failure | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.RequestOp'}}, + F3, [failure | Path]) + end; + _ -> ok + end, + lists:foreach(fun (compare) -> ok; + (success) -> ok; + (failure) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.TxnRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.TxnRequest'}, + M, Path); +'v_msg_Etcd.TxnRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.TxnRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.TxnResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.TxnResponse'/3}). +'v_msg_Etcd.TxnResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{succeeded := F2} -> + v_type_bool(F2, [succeeded | Path], TrUserData); + _ -> ok + end, + case M of + #{responses := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.ResponseOp'(Elem, [responses | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.ResponseOp'}}, + F3, [responses | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (succeeded) -> ok; + (responses) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.TxnResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.TxnResponse'}, + M, Path); +'v_msg_Etcd.TxnResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.TxnResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CompactionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CompactionRequest'/3}). +'v_msg_Etcd.CompactionRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{revision := F1} -> + v_type_int64(F1, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{physical := F2} -> + v_type_bool(F2, [physical | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (revision) -> ok; + (physical) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CompactionRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CompactionRequest'}, + M, Path); +'v_msg_Etcd.CompactionRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CompactionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CompactionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CompactionResponse'/3}). +'v_msg_Etcd.CompactionResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CompactionResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CompactionResponse'}, + M, Path); +'v_msg_Etcd.CompactionResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CompactionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashRequest'/3}). +'v_msg_Etcd.HashRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashRequest'}, + M, Path); +'v_msg_Etcd.HashRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashKVRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashKVRequest'/3}). +'v_msg_Etcd.HashKVRequest'(#{} = M, Path, TrUserData) -> + case M of + #{revision := F1} -> + v_type_int64(F1, [revision | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashKVRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashKVRequest'}, + M, Path); +'v_msg_Etcd.HashKVRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashKVRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashKVResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashKVResponse'/3}). +'v_msg_Etcd.HashKVResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{hash := F2} -> + v_type_uint32(F2, [hash | Path], TrUserData); + _ -> ok + end, + case M of + #{compact_revision := F3} -> + v_type_int64(F3, [compact_revision | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (hash) -> ok; + (compact_revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashKVResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashKVResponse'}, + M, Path); +'v_msg_Etcd.HashKVResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashKVResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashResponse'/3}). +'v_msg_Etcd.HashResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{hash := F2} -> + v_type_uint32(F2, [hash | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (hash) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashResponse'}, + M, Path); +'v_msg_Etcd.HashResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.SnapshotRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.SnapshotRequest'/3}). +'v_msg_Etcd.SnapshotRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.SnapshotRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.SnapshotRequest'}, + M, Path); +'v_msg_Etcd.SnapshotRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.SnapshotRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.SnapshotResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.SnapshotResponse'/3}). +'v_msg_Etcd.SnapshotResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{remaining_bytes := F2} -> + v_type_uint64(F2, [remaining_bytes | Path], TrUserData); + _ -> ok + end, + case M of + #{blob := F3} -> + v_type_bytes(F3, [blob | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (remaining_bytes) -> ok; + (blob) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.SnapshotResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.SnapshotResponse'}, + M, Path); +'v_msg_Etcd.SnapshotResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.SnapshotResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchRequest'/3}). +'v_msg_Etcd.WatchRequest'(#{} = M, Path, TrUserData) -> + case M of + #{request_union := {create_request, OF1}} -> + 'v_msg_Etcd.WatchCreateRequest'(OF1, + [create_request, request_union + | Path], + TrUserData); + #{request_union := {cancel_request, OF1}} -> + 'v_msg_Etcd.WatchCancelRequest'(OF1, + [cancel_request, request_union + | Path], + TrUserData); + #{request_union := {progress_request, OF1}} -> + 'v_msg_Etcd.WatchProgressRequest'(OF1, + [progress_request, request_union + | Path], + TrUserData); + #{request_union := F1} -> + mk_type_error(invalid_oneof, F1, + [request_union | Path]); + _ -> ok + end, + lists:foreach(fun (request_union) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchRequest'}, + M, Path); +'v_msg_Etcd.WatchRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchCreateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchCreateRequest'/3}). +'v_msg_Etcd.WatchCreateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{start_revision := F3} -> + v_type_int64(F3, [start_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{progress_notify := F4} -> + v_type_bool(F4, [progress_notify | Path], TrUserData); + _ -> ok + end, + case M of + #{filters := F5} -> + if is_list(F5) -> + _ = ['v_enum_Etcd.WatchCreateRequest.FilterType'(Elem, + [filters + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {enum, 'Etcd.WatchCreateRequest.FilterType'}}, + F5, [filters | Path]) + end; + _ -> ok + end, + case M of + #{prev_kv := F6} -> + v_type_bool(F6, [prev_kv | Path], TrUserData); + _ -> ok + end, + case M of + #{watch_id := F7} -> + v_type_int64(F7, [watch_id | Path], TrUserData); + _ -> ok + end, + case M of + #{fragment := F8} -> + v_type_bool(F8, [fragment | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (start_revision) -> ok; + (progress_notify) -> ok; + (filters) -> ok; + (prev_kv) -> ok; + (watch_id) -> ok; + (fragment) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchCreateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchCreateRequest'}, + M, Path); +'v_msg_Etcd.WatchCreateRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchCreateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchCancelRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchCancelRequest'/3}). +'v_msg_Etcd.WatchCancelRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{watch_id := F1} -> + v_type_int64(F1, [watch_id | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (watch_id) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchCancelRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchCancelRequest'}, + M, Path); +'v_msg_Etcd.WatchCancelRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchCancelRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchProgressRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchProgressRequest'/3}). +'v_msg_Etcd.WatchProgressRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchProgressRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchProgressRequest'}, + M, Path); +'v_msg_Etcd.WatchProgressRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.WatchProgressRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchResponse'/3}). +'v_msg_Etcd.WatchResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{watch_id := F2} -> + v_type_int64(F2, [watch_id | Path], TrUserData); + _ -> ok + end, + case M of + #{created := F3} -> + v_type_bool(F3, [created | Path], TrUserData); + _ -> ok + end, + case M of + #{canceled := F4} -> + v_type_bool(F4, [canceled | Path], TrUserData); + _ -> ok + end, + case M of + #{compact_revision := F5} -> + v_type_int64(F5, [compact_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{cancel_reason := F6} -> + v_type_string(F6, [cancel_reason | Path], TrUserData); + _ -> ok + end, + case M of + #{fragment := F7} -> + v_type_bool(F7, [fragment | Path], TrUserData); + _ -> ok + end, + case M of + #{events := F8} -> + if is_list(F8) -> + _ = ['v_msg_mvccpb.Event'(Elem, [events | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'mvccpb.Event'}}, + F8, [events | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (watch_id) -> ok; + (created) -> ok; + (canceled) -> ok; + (compact_revision) -> ok; + (cancel_reason) -> ok; + (fragment) -> ok; + (events) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchResponse'}, + M, Path); +'v_msg_Etcd.WatchResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseGrantRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseGrantRequest'/3}). +'v_msg_Etcd.LeaseGrantRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'TTL' := F1} -> + v_type_int64(F1, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('TTL') -> ok; + ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseGrantRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseGrantRequest'}, + M, Path); +'v_msg_Etcd.LeaseGrantRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseGrantRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseGrantResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseGrantResponse'/3}). +'v_msg_Etcd.LeaseGrantResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{error := F4} -> + v_type_string(F4, [error | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (error) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseGrantResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseGrantResponse'}, + M, Path); +'v_msg_Etcd.LeaseGrantResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseGrantResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseRevokeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseRevokeRequest'/3}). +'v_msg_Etcd.LeaseRevokeRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseRevokeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseRevokeRequest'}, + M, Path); +'v_msg_Etcd.LeaseRevokeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseRevokeRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseRevokeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseRevokeResponse'/3}). +'v_msg_Etcd.LeaseRevokeResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseRevokeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseRevokeResponse'}, + M, Path); +'v_msg_Etcd.LeaseRevokeResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseRevokeResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpoint'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpoint'/3}). +'v_msg_Etcd.LeaseCheckpoint'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{remaining_TTL := F2} -> + v_type_int64(F2, [remaining_TTL | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (remaining_TTL) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpoint'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpoint'}, + M, Path); +'v_msg_Etcd.LeaseCheckpoint'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseCheckpoint'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpointRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpointRequest'/3}). +'v_msg_Etcd.LeaseCheckpointRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{checkpoints := F1} -> + if is_list(F1) -> + _ = ['v_msg_Etcd.LeaseCheckpoint'(Elem, + [checkpoints | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.LeaseCheckpoint'}}, + F1, [checkpoints | Path]) + end; + _ -> ok + end, + lists:foreach(fun (checkpoints) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpointRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpointRequest'}, + M, Path); +'v_msg_Etcd.LeaseCheckpointRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseCheckpointRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpointResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpointResponse'/3}). +'v_msg_Etcd.LeaseCheckpointResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpointResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpointResponse'}, + M, Path); +'v_msg_Etcd.LeaseCheckpointResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseCheckpointResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseKeepAliveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseKeepAliveRequest'/3}). +'v_msg_Etcd.LeaseKeepAliveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseKeepAliveRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseKeepAliveRequest'}, + M, Path); +'v_msg_Etcd.LeaseKeepAliveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseKeepAliveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseKeepAliveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseKeepAliveResponse'/3}). +'v_msg_Etcd.LeaseKeepAliveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseKeepAliveResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseKeepAliveResponse'}, + M, Path); +'v_msg_Etcd.LeaseKeepAliveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseKeepAliveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseTimeToLiveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseTimeToLiveRequest'/3}). +'v_msg_Etcd.LeaseTimeToLiveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{keys := F2} -> + v_type_bool(F2, [keys | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (keys) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseTimeToLiveRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseTimeToLiveRequest'}, + M, Path); +'v_msg_Etcd.LeaseTimeToLiveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseTimeToLiveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseTimeToLiveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseTimeToLiveResponse'/3}). +'v_msg_Etcd.LeaseTimeToLiveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{grantedTTL := F4} -> + v_type_int64(F4, [grantedTTL | Path], TrUserData); + _ -> ok + end, + case M of + #{keys := F5} -> + if is_list(F5) -> + _ = [v_type_bytes(Elem, [keys | Path], TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, bytes}, F5, + [keys | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (grantedTTL) -> ok; + (keys) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseTimeToLiveResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseTimeToLiveResponse'}, + M, Path); +'v_msg_Etcd.LeaseTimeToLiveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseTimeToLiveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseLeasesRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseLeasesRequest'/3}). +'v_msg_Etcd.LeaseLeasesRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseLeasesRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseLeasesRequest'}, + M, Path); +'v_msg_Etcd.LeaseLeasesRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseLeasesRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseStatus'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseStatus'/3}). +'v_msg_Etcd.LeaseStatus'(#{} = M, Path, TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseStatus'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseStatus'}, + M, Path); +'v_msg_Etcd.LeaseStatus'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseStatus'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseLeasesResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseLeasesResponse'/3}). +'v_msg_Etcd.LeaseLeasesResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{leases := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.LeaseStatus'(Elem, [leases | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.LeaseStatus'}}, + F2, [leases | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (leases) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseLeasesResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseLeasesResponse'}, + M, Path); +'v_msg_Etcd.LeaseLeasesResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseLeasesResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.Member'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.Member'/3}). +'v_msg_Etcd.Member'(#{} = M, Path, TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{name := F2} -> + v_type_string(F2, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{peerURLs := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [peerURLs | Path]) + end; + _ -> ok + end, + case M of + #{clientURLs := F4} -> + if is_list(F4) -> + _ = [v_type_string(Elem, [clientURLs | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, string}, F4, + [clientURLs | Path]) + end; + _ -> ok + end, + case M of + #{isLearner := F5} -> + v_type_bool(F5, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (name) -> ok; + (peerURLs) -> ok; + (clientURLs) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.Member'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.Member'}, + M, Path); +'v_msg_Etcd.Member'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.Member'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberAddRequest'/3}). +'v_msg_Etcd.MemberAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{peerURLs := F1} -> + if is_list(F1) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, string}, F1, + [peerURLs | Path]) + end; + _ -> ok + end, + case M of + #{isLearner := F2} -> + v_type_bool(F2, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (peerURLs) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberAddRequest'}, + M, Path); +'v_msg_Etcd.MemberAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberAddResponse'/3}). +'v_msg_Etcd.MemberAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{member := F2} -> + 'v_msg_Etcd.Member'(F2, [member | Path], TrUserData); + _ -> ok + end, + case M of + #{members := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F3, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (member) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberAddResponse'}, + M, Path); +'v_msg_Etcd.MemberAddResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberRemoveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberRemoveRequest'/3}). +'v_msg_Etcd.MemberRemoveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberRemoveRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberRemoveRequest'}, + M, Path); +'v_msg_Etcd.MemberRemoveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberRemoveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberRemoveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberRemoveResponse'/3}). +'v_msg_Etcd.MemberRemoveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberRemoveResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberRemoveResponse'}, + M, Path); +'v_msg_Etcd.MemberRemoveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberRemoveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberUpdateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberUpdateRequest'/3}). +'v_msg_Etcd.MemberUpdateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{peerURLs := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [peerURLs | Path]) + end; + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (peerURLs) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberUpdateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberUpdateRequest'}, + M, Path); +'v_msg_Etcd.MemberUpdateRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberUpdateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberUpdateResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberUpdateResponse'/3}). +'v_msg_Etcd.MemberUpdateResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberUpdateResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberUpdateResponse'}, + M, Path); +'v_msg_Etcd.MemberUpdateResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberUpdateResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberListRequest'/3}). +'v_msg_Etcd.MemberListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberListRequest'}, + M, Path); +'v_msg_Etcd.MemberListRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberListResponse'/3}). +'v_msg_Etcd.MemberListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberListResponse'}, + M, Path); +'v_msg_Etcd.MemberListResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberPromoteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberPromoteRequest'/3}). +'v_msg_Etcd.MemberPromoteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberPromoteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberPromoteRequest'}, + M, Path); +'v_msg_Etcd.MemberPromoteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberPromoteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberPromoteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberPromoteResponse'/3}). +'v_msg_Etcd.MemberPromoteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberPromoteResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberPromoteResponse'}, + M, Path); +'v_msg_Etcd.MemberPromoteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberPromoteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DefragmentRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DefragmentRequest'/3}). +'v_msg_Etcd.DefragmentRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DefragmentRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DefragmentRequest'}, + M, Path); +'v_msg_Etcd.DefragmentRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DefragmentRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DefragmentResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DefragmentResponse'/3}). +'v_msg_Etcd.DefragmentResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DefragmentResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DefragmentResponse'}, + M, Path); +'v_msg_Etcd.DefragmentResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DefragmentResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MoveLeaderRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MoveLeaderRequest'/3}). +'v_msg_Etcd.MoveLeaderRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{targetID := F1} -> + v_type_uint64(F1, [targetID | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (targetID) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MoveLeaderRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MoveLeaderRequest'}, + M, Path); +'v_msg_Etcd.MoveLeaderRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MoveLeaderRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MoveLeaderResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MoveLeaderResponse'/3}). +'v_msg_Etcd.MoveLeaderResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MoveLeaderResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MoveLeaderResponse'}, + M, Path); +'v_msg_Etcd.MoveLeaderResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MoveLeaderResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmRequest'/3}). +'v_msg_Etcd.AlarmRequest'(#{} = M, Path, TrUserData) -> + case M of + #{action := F1} -> + 'v_enum_Etcd.AlarmRequest.AlarmAction'(F1, + [action | Path], TrUserData); + _ -> ok + end, + case M of + #{memberID := F2} -> + v_type_uint64(F2, [memberID | Path], TrUserData); + _ -> ok + end, + case M of + #{alarm := F3} -> + 'v_enum_Etcd.AlarmType'(F3, [alarm | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (action) -> ok; + (memberID) -> ok; + (alarm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmRequest'}, + M, Path); +'v_msg_Etcd.AlarmRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmMember'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmMember'/3}). +'v_msg_Etcd.AlarmMember'(#{} = M, Path, TrUserData) -> + case M of + #{memberID := F1} -> + v_type_uint64(F1, [memberID | Path], TrUserData); + _ -> ok + end, + case M of + #{alarm := F2} -> + 'v_enum_Etcd.AlarmType'(F2, [alarm | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (memberID) -> ok; + (alarm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmMember'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmMember'}, + M, Path); +'v_msg_Etcd.AlarmMember'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmMember'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmResponse'/3}). +'v_msg_Etcd.AlarmResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{alarms := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.AlarmMember'(Elem, [alarms | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.AlarmMember'}}, + F2, [alarms | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (alarms) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmResponse'}, + M, Path); +'v_msg_Etcd.AlarmResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.StatusRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.StatusRequest'/3}). +'v_msg_Etcd.StatusRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.StatusRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.StatusRequest'}, + M, Path); +'v_msg_Etcd.StatusRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.StatusRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.StatusResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.StatusResponse'/3}). +'v_msg_Etcd.StatusResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{version := F2} -> + v_type_string(F2, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{dbSize := F3} -> + v_type_int64(F3, [dbSize | Path], TrUserData); + _ -> ok + end, + case M of + #{leader := F4} -> + v_type_uint64(F4, [leader | Path], TrUserData); + _ -> ok + end, + case M of + #{raftIndex := F5} -> + v_type_uint64(F5, [raftIndex | Path], TrUserData); + _ -> ok + end, + case M of + #{raftTerm := F6} -> + v_type_uint64(F6, [raftTerm | Path], TrUserData); + _ -> ok + end, + case M of + #{raftAppliedIndex := F7} -> + v_type_uint64(F7, [raftAppliedIndex | Path], + TrUserData); + _ -> ok + end, + case M of + #{errors := F8} -> + if is_list(F8) -> + _ = [v_type_string(Elem, [errors | Path], TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, string}, F8, + [errors | Path]) + end; + _ -> ok + end, + case M of + #{dbSizeInUse := F9} -> + v_type_int64(F9, [dbSizeInUse | Path], TrUserData); + _ -> ok + end, + case M of + #{isLearner := F10} -> + v_type_bool(F10, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (version) -> ok; + (dbSize) -> ok; + (leader) -> ok; + (raftIndex) -> ok; + (raftTerm) -> ok; + (raftAppliedIndex) -> ok; + (errors) -> ok; + (dbSizeInUse) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.StatusResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.StatusResponse'}, + M, Path); +'v_msg_Etcd.StatusResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.StatusResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthEnableRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthEnableRequest'/3}). +'v_msg_Etcd.AuthEnableRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthEnableRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthEnableRequest'}, + M, Path); +'v_msg_Etcd.AuthEnableRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthEnableRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthDisableRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthDisableRequest'/3}). +'v_msg_Etcd.AuthDisableRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthDisableRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthDisableRequest'}, + M, Path); +'v_msg_Etcd.AuthDisableRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthDisableRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthenticateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthenticateRequest'/3}). +'v_msg_Etcd.AuthenticateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthenticateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthenticateRequest'}, + M, Path); +'v_msg_Etcd.AuthenticateRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthenticateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserAddRequest'/3}). +'v_msg_Etcd.AuthUserAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_authpb.UserAddOptions'(F3, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserAddRequest'}, + M, Path); +'v_msg_Etcd.AuthUserAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthUserAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGetRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGetRequest'/3}). +'v_msg_Etcd.AuthUserGetRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGetRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGetRequest'}, + M, Path); +'v_msg_Etcd.AuthUserGetRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthUserGetRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserDeleteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserDeleteRequest'/3}). +'v_msg_Etcd.AuthUserDeleteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserDeleteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserDeleteRequest'}, + M, Path); +'v_msg_Etcd.AuthUserDeleteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserDeleteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserChangePasswordRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserChangePasswordRequest'/3}). +'v_msg_Etcd.AuthUserChangePasswordRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserChangePasswordRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserChangePasswordRequest'}, + M, Path); +'v_msg_Etcd.AuthUserChangePasswordRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserChangePasswordRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGrantRoleRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGrantRoleRequest'/3}). +'v_msg_Etcd.AuthUserGrantRoleRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{user := F1} -> + v_type_string(F1, [user | Path], TrUserData); + _ -> ok + end, + case M of + #{role := F2} -> + v_type_string(F2, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (user) -> ok; + (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGrantRoleRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGrantRoleRequest'}, + M, Path); +'v_msg_Etcd.AuthUserGrantRoleRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGrantRoleRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +'v_msg_Etcd.AuthUserRevokeRoleRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{role := F2} -> + v_type_string(F2, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserRevokeRoleRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserRevokeRoleRequest'}, + M, Path); +'v_msg_Etcd.AuthUserRevokeRoleRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserRevokeRoleRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleAddRequest'/3}). +'v_msg_Etcd.AuthRoleAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleAddRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthRoleAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGetRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGetRequest'/3}). +'v_msg_Etcd.AuthRoleGetRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGetRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGetRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleGetRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthRoleGetRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserListRequest'/3}). +'v_msg_Etcd.AuthUserListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserListRequest'}, + M, Path); +'v_msg_Etcd.AuthUserListRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleListRequest'/3}). +'v_msg_Etcd.AuthRoleListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleListRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleListRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleDeleteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleDeleteRequest'/3}). +'v_msg_Etcd.AuthRoleDeleteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleDeleteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleDeleteRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleDeleteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleDeleteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{perm := F2} -> + 'v_msg_authpb.Permission'(F2, [perm | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (perm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGrantPermissionRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGrantPermissionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleRevokePermissionRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleRevokePermissionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthEnableResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthEnableResponse'/3}). +'v_msg_Etcd.AuthEnableResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthEnableResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthEnableResponse'}, + M, Path); +'v_msg_Etcd.AuthEnableResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthEnableResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthDisableResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthDisableResponse'/3}). +'v_msg_Etcd.AuthDisableResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthDisableResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthDisableResponse'}, + M, Path); +'v_msg_Etcd.AuthDisableResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthDisableResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthenticateResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthenticateResponse'/3}). +'v_msg_Etcd.AuthenticateResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{token := F2} -> + v_type_string(F2, [token | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (token) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthenticateResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthenticateResponse'}, + M, Path); +'v_msg_Etcd.AuthenticateResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthenticateResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserAddResponse'/3}). +'v_msg_Etcd.AuthUserAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserAddResponse'}, + M, Path); +'v_msg_Etcd.AuthUserAddResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGetResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGetResponse'/3}). +'v_msg_Etcd.AuthUserGetResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{roles := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [roles | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (roles) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGetResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGetResponse'}, + M, Path); +'v_msg_Etcd.AuthUserGetResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGetResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserDeleteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserDeleteResponse'/3}). +'v_msg_Etcd.AuthUserDeleteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserDeleteResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserDeleteResponse'}, + M, Path); +'v_msg_Etcd.AuthUserDeleteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserDeleteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserChangePasswordResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserChangePasswordResponse'/3}). +'v_msg_Etcd.AuthUserChangePasswordResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserChangePasswordResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserChangePasswordResponse'}, + M, Path); +'v_msg_Etcd.AuthUserChangePasswordResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserChangePasswordResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGrantRoleResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGrantRoleResponse'/3}). +'v_msg_Etcd.AuthUserGrantRoleResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGrantRoleResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGrantRoleResponse'}, + M, Path); +'v_msg_Etcd.AuthUserGrantRoleResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGrantRoleResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +'v_msg_Etcd.AuthUserRevokeRoleResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserRevokeRoleResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserRevokeRoleResponse'}, + M, Path); +'v_msg_Etcd.AuthUserRevokeRoleResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserRevokeRoleResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleAddResponse'/3}). +'v_msg_Etcd.AuthRoleAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleAddResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleAddResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGetResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGetResponse'/3}). +'v_msg_Etcd.AuthRoleGetResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{perm := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, [perm | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [perm | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (perm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGetResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGetResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleGetResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGetResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleListResponse'/3}). +'v_msg_Etcd.AuthRoleListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{roles := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [roles | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (roles) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleListResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleListResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserListResponse'/3}). +'v_msg_Etcd.AuthUserListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{users := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [users | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [users | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (users) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserListResponse'}, + M, Path); +'v_msg_Etcd.AuthUserListResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleDeleteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleDeleteResponse'/3}). +'v_msg_Etcd.AuthRoleDeleteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleDeleteResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleDeleteResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleDeleteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleDeleteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGrantPermissionResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGrantPermissionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleRevokePermissionResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleRevokePermissionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HealthCheckRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HealthCheckRequest'/3}). +'v_msg_Etcd.HealthCheckRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{service := F1} -> + v_type_string(F1, [service | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (service) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HealthCheckRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HealthCheckRequest'}, + M, Path); +'v_msg_Etcd.HealthCheckRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HealthCheckRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HealthCheckResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HealthCheckResponse'/3}). +'v_msg_Etcd.HealthCheckResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{status := F1} -> + 'v_enum_Etcd.HealthCheckResponse.ServingStatus'(F1, + [status | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (status) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HealthCheckResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HealthCheckResponse'}, + M, Path); +'v_msg_Etcd.HealthCheckResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.HealthCheckResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LockRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LockRequest'/3}). +'v_msg_Etcd.LockRequest'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F2} -> + v_type_int64(F2, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LockRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LockRequest'}, + M, Path); +'v_msg_Etcd.LockRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LockRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LockResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LockResponse'/3}). +'v_msg_Etcd.LockResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (key) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LockResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LockResponse'}, + M, Path); +'v_msg_Etcd.LockResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LockResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.UnlockRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.UnlockRequest'/3}). +'v_msg_Etcd.UnlockRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.UnlockRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.UnlockRequest'}, + M, Path); +'v_msg_Etcd.UnlockRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.UnlockRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.UnlockResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.UnlockResponse'/3}). +'v_msg_Etcd.UnlockResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.UnlockResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.UnlockResponse'}, + M, Path); +'v_msg_Etcd.UnlockResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.UnlockResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CampaignRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CampaignRequest'/3}). +'v_msg_Etcd.CampaignRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F2} -> + v_type_int64(F2, [lease | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F3} -> + v_type_bytes(F3, [value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (lease) -> ok; + (value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CampaignRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CampaignRequest'}, + M, Path); +'v_msg_Etcd.CampaignRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CampaignRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CampaignResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CampaignResponse'/3}). +'v_msg_Etcd.CampaignResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{leader := F2} -> + 'v_msg_Etcd.LeaderKey'(F2, [leader | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (leader) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CampaignResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CampaignResponse'}, + M, Path); +'v_msg_Etcd.CampaignResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CampaignResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderKey'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderKey'/3}). +'v_msg_Etcd.LeaderKey'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{rev := F3} -> + v_type_int64(F3, [rev | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F4} -> + v_type_int64(F4, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (key) -> ok; + (rev) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderKey'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderKey'}, + M, Path); +'v_msg_Etcd.LeaderKey'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderKey'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderRequest'/3}). +'v_msg_Etcd.LeaderRequest'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderRequest'}, + M, Path); +'v_msg_Etcd.LeaderRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderResponse'/3}). +'v_msg_Etcd.LeaderResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderResponse'}, + M, Path); +'v_msg_Etcd.LeaderResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResignRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResignRequest'/3}). +'v_msg_Etcd.ResignRequest'(#{} = M, Path, TrUserData) -> + case M of + #{leader := F1} -> + 'v_msg_Etcd.LeaderKey'(F1, [leader | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (leader) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResignRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResignRequest'}, + M, Path); +'v_msg_Etcd.ResignRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResignRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResignResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResignResponse'/3}). +'v_msg_Etcd.ResignResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResignResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResignResponse'}, + M, Path); +'v_msg_Etcd.ResignResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResignResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ProclaimRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ProclaimRequest'/3}). +'v_msg_Etcd.ProclaimRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{leader := F1} -> + 'v_msg_Etcd.LeaderKey'(F1, [leader | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + v_type_bytes(F2, [value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (leader) -> ok; + (value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ProclaimRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ProclaimRequest'}, + M, Path); +'v_msg_Etcd.ProclaimRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ProclaimRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ProclaimResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ProclaimResponse'/3}). +'v_msg_Etcd.ProclaimResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ProclaimResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ProclaimResponse'}, + M, Path); +'v_msg_Etcd.ProclaimResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ProclaimResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.KeyValue'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.KeyValue'/3}). +'v_msg_mvccpb.KeyValue'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{create_revision := F2} -> + v_type_int64(F2, [create_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{mod_revision := F3} -> + v_type_int64(F3, [mod_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{version := F4} -> + v_type_int64(F4, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F5} -> + v_type_bytes(F5, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F6} -> + v_type_int64(F6, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (create_revision) -> ok; + (mod_revision) -> ok; + (version) -> ok; + (value) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.KeyValue'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.KeyValue'}, + M, Path); +'v_msg_mvccpb.KeyValue'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.KeyValue'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.Event'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.Event'/3}). +'v_msg_mvccpb.Event'(#{} = M, Path, TrUserData) -> + case M of + #{type := F1} -> + 'v_enum_mvccpb.Event.EventType'(F1, [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + 'v_msg_mvccpb.KeyValue'(F3, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (type) -> ok; + (kv) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.Event'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.Event'}, + M, Path); +'v_msg_mvccpb.Event'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.Event'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.UserAddOptions'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.UserAddOptions'/3}). +'v_msg_authpb.UserAddOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{no_password := F1} -> + v_type_bool(F1, [no_password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (no_password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.UserAddOptions'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.UserAddOptions'}, + M, Path); +'v_msg_authpb.UserAddOptions'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.UserAddOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.User'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.User'/3}). +'v_msg_authpb.User'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_bytes(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{roles := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [roles | Path]) + end; + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_authpb.UserAddOptions'(F4, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (roles) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.User'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.User'}, + M, Path); +'v_msg_authpb.User'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.User'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Permission'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Permission'/3}). +'v_msg_authpb.Permission'(#{} = M, Path, TrUserData) -> + case M of + #{permType := F1} -> + 'v_enum_authpb.Permission.Type'(F1, [permType | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (permType) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Permission'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Permission'}, + M, Path); +'v_msg_authpb.Permission'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Permission'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Role'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Role'/3}). +'v_msg_authpb.Role'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{keyPermission := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, + [keyPermission | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [keyPermission | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (keyPermission) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Role'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Role'}, + M, Path); +'v_msg_authpb.Role'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Role'}, X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.RangeRequest.SortOrder'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.RangeRequest.SortOrder'/3}). +'v_enum_Etcd.RangeRequest.SortOrder'('NONE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'('ASCEND', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'('DESCEND', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.RangeRequest.SortOrder'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.RangeRequest.SortOrder'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.RangeRequest.SortTarget'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.RangeRequest.SortTarget'/3}). +'v_enum_Etcd.RangeRequest.SortTarget'('KEY', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('VERSION', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('CREATE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('MOD', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('VALUE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.RangeRequest.SortTarget'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.RangeRequest.SortTarget'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.Compare.CompareResult'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.Compare.CompareResult'/3}). +'v_enum_Etcd.Compare.CompareResult'('EQUAL', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('GREATER', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('LESS', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('NOT_EQUAL', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.Compare.CompareResult'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.Compare.CompareResult'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.Compare.CompareTarget'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.Compare.CompareTarget'/3}). +'v_enum_Etcd.Compare.CompareTarget'('VERSION', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('CREATE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('MOD', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('VALUE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('LEASE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.Compare.CompareTarget'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.Compare.CompareTarget'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.WatchCreateRequest.FilterType'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.WatchCreateRequest.FilterType'/3}). +'v_enum_Etcd.WatchCreateRequest.FilterType'('NOPUT', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.WatchCreateRequest.FilterType'('NODELETE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.WatchCreateRequest.FilterType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.WatchCreateRequest.FilterType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.WatchCreateRequest.FilterType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.AlarmType'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.AlarmType'/3}). +'v_enum_Etcd.AlarmType'('NONE', _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'('NOSPACE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'('CORRUPT', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.AlarmType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'Etcd.AlarmType'}, X, + Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.AlarmRequest.AlarmAction'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.AlarmRequest.AlarmAction'/3}). +'v_enum_Etcd.AlarmRequest.AlarmAction'('GET', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'('ACTIVATE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.AlarmRequest.AlarmAction'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.AlarmRequest.AlarmAction'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.HealthCheckResponse.ServingStatus'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.HealthCheckResponse.ServingStatus'/3}). +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.HealthCheckResponse.ServingStatus'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.HealthCheckResponse.ServingStatus'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_mvccpb.Event.EventType'/3}). +-dialyzer({nowarn_function,'v_enum_mvccpb.Event.EventType'/3}). +'v_enum_mvccpb.Event.EventType'('PUT', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'('DELETE', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_mvccpb.Event.EventType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'mvccpb.Event.EventType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_authpb.Permission.Type'/3}). +-dialyzer({nowarn_function,'v_enum_authpb.Permission.Type'/3}). +'v_enum_authpb.Permission.Type'('READ', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('WRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('READWRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_authpb.Permission.Type'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'authpb.Permission.Type'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint32/3}). +-dialyzer({nowarn_function,v_type_uint32/3}). +v_type_uint32(N, _Path, _TrUserData) + when 0 =< N, N =< 4294967295 -> + ok; +v_type_uint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint32, unsigned, + 32}, + N, Path); +v_type_uint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint32, unsigned, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'Etcd.RangeRequest.SortOrder'}, + [{'NONE', 0}, {'ASCEND', 1}, {'DESCEND', 2}]}, + {{enum, 'Etcd.RangeRequest.SortTarget'}, + [{'KEY', 0}, {'VERSION', 1}, {'CREATE', 2}, {'MOD', 3}, + {'VALUE', 4}]}, + {{enum, 'Etcd.Compare.CompareResult'}, + [{'EQUAL', 0}, {'GREATER', 1}, {'LESS', 2}, + {'NOT_EQUAL', 3}]}, + {{enum, 'Etcd.Compare.CompareTarget'}, + [{'VERSION', 0}, {'CREATE', 1}, {'MOD', 2}, + {'VALUE', 3}, {'LEASE', 4}]}, + {{enum, 'Etcd.WatchCreateRequest.FilterType'}, + [{'NOPUT', 0}, {'NODELETE', 1}]}, + {{enum, 'Etcd.AlarmType'}, + [{'NONE', 0}, {'NOSPACE', 1}, {'CORRUPT', 2}]}, + {{enum, 'Etcd.AlarmRequest.AlarmAction'}, + [{'GET', 0}, {'ACTIVATE', 1}, {'DEACTIVATE', 2}]}, + {{enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{enum, 'mvccpb.Event.EventType'}, + [{'PUT', 0}, {'DELETE', 1}]}, + {{enum, 'authpb.Permission.Type'}, + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]}, + {{msg, 'Etcd.ResponseHeader'}, + [#{name => cluster_id, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => member_id, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => revision, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => raft_term, fnum => 4, rnum => 5, + type => uint64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.RangeRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => limit, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => revision, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => sort_order, fnum => 5, rnum => 6, + type => {enum, 'Etcd.RangeRequest.SortOrder'}, + occurrence => optional, opts => []}, + #{name => sort_target, fnum => 6, rnum => 7, + type => {enum, 'Etcd.RangeRequest.SortTarget'}, + occurrence => optional, opts => []}, + #{name => serializable, fnum => 7, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => keys_only, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}, + #{name => count_only, fnum => 9, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => min_mod_revision, fnum => 10, rnum => 11, + type => int64, occurrence => optional, opts => []}, + #{name => max_mod_revision, fnum => 11, rnum => 12, + type => int64, occurrence => optional, opts => []}, + #{name => min_create_revision, fnum => 12, rnum => 13, + type => int64, occurrence => optional, opts => []}, + #{name => max_create_revision, fnum => 13, rnum => 14, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.RangeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kvs, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}, + #{name => more, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => count, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.PutRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => ignore_value, fnum => 5, rnum => 6, + type => bool, occurrence => optional, opts => []}, + #{name => ignore_lease, fnum => 6, rnum => 7, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.PutResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.DeleteRangeRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.DeleteRangeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => deleted, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kvs, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.RequestOp'}, + [#{name => request, rnum => 2, + fields => + [#{name => request_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutRequest'}, + occurrence => optional, opts => []}, + #{name => request_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnRequest'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.ResponseOp'}, + [#{name => response, rnum => 2, + fields => + [#{name => response_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutResponse'}, + occurrence => optional, opts => []}, + #{name => response_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnResponse'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.Compare'}, + [#{name => result, fnum => 1, rnum => 2, + type => {enum, 'Etcd.Compare.CompareResult'}, + occurrence => optional, opts => []}, + #{name => target, fnum => 2, rnum => 3, + type => {enum, 'Etcd.Compare.CompareTarget'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}, + #{name => target_union, rnum => 5, + fields => + [#{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 6, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => value, fnum => 7, rnum => 5, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 8, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + #{name => range_end, fnum => 64, rnum => 6, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.TxnRequest'}, + [#{name => compare, fnum => 1, rnum => 2, + type => {msg, 'Etcd.Compare'}, occurrence => repeated, + opts => []}, + #{name => success, fnum => 2, rnum => 3, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}, + #{name => failure, fnum => 3, rnum => 4, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.TxnResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => succeeded, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => responses, fnum => 3, rnum => 4, + type => {msg, 'Etcd.ResponseOp'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.CompactionRequest'}, + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}, + #{name => physical, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CompactionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashRequest'}, []}, + {{msg, 'Etcd.HashKVRequest'}, + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashKVResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.SnapshotRequest'}, []}, + {{msg, 'Etcd.SnapshotResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => remaining_bytes, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => blob, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchRequest'}, + [#{name => request_union, rnum => 2, + fields => + [#{name => create_request, fnum => 1, rnum => 2, + type => {msg, 'Etcd.WatchCreateRequest'}, + occurrence => optional, opts => []}, + #{name => cancel_request, fnum => 2, rnum => 2, + type => {msg, 'Etcd.WatchCancelRequest'}, + occurrence => optional, opts => []}, + #{name => progress_request, fnum => 3, rnum => 2, + type => {msg, 'Etcd.WatchProgressRequest'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.WatchCreateRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => start_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => progress_notify, fnum => 4, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => filters, fnum => 5, rnum => 6, + type => {enum, 'Etcd.WatchCreateRequest.FilterType'}, + occurrence => repeated, opts => [packed]}, + #{name => prev_kv, fnum => 6, rnum => 7, type => bool, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 7, rnum => 8, type => int64, + occurrence => optional, opts => []}, + #{name => fragment, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchCancelRequest'}, + [#{name => watch_id, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchProgressRequest'}, []}, + {{msg, 'Etcd.WatchResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => created, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => canceled, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 5, rnum => 6, + type => int64, occurrence => optional, opts => []}, + #{name => cancel_reason, fnum => 6, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => fragment, fnum => 7, rnum => 8, type => bool, + occurrence => optional, opts => []}, + #{name => events, fnum => 11, rnum => 9, + type => {msg, 'mvccpb.Event'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.LeaseGrantRequest'}, + [#{name => 'TTL', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseGrantResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => error, fnum => 4, rnum => 5, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseRevokeRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseRevokeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpoint'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => remaining_TTL, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpointRequest'}, + [#{name => checkpoints, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaseCheckpoint'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpointResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseKeepAliveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseKeepAliveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseTimeToLiveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => keys, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseTimeToLiveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => grantedTTL, fnum => 4, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => keys, fnum => 5, rnum => 6, type => bytes, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.LeaseLeasesRequest'}, []}, + {{msg, 'Etcd.LeaseStatus'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseLeasesResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leases, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaseStatus'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.Member'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => name, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => clientURLs, fnum => 4, rnum => 5, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 5, rnum => 6, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberAddRequest'}, + [#{name => peerURLs, fnum => 1, rnum => 2, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => member, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => optional, + opts => []}, + #{name => members, fnum => 3, rnum => 4, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberRemoveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberRemoveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberUpdateRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 2, rnum => 3, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.MemberUpdateResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberListRequest'}, []}, + {{msg, 'Etcd.MemberListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberPromoteRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberPromoteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.DefragmentRequest'}, []}, + {{msg, 'Etcd.DefragmentResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MoveLeaderRequest'}, + [#{name => targetID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MoveLeaderResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmRequest'}, + [#{name => action, fnum => 1, rnum => 2, + type => {enum, 'Etcd.AlarmRequest.AlarmAction'}, + occurrence => optional, opts => []}, + #{name => memberID, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 3, rnum => 4, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmMember'}, + [#{name => memberID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 2, rnum => 3, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => alarms, fnum => 2, rnum => 3, + type => {msg, 'Etcd.AlarmMember'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.StatusRequest'}, []}, + {{msg, 'Etcd.StatusResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => version, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dbSize, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => leader, fnum => 4, rnum => 5, type => uint64, + occurrence => optional, opts => []}, + #{name => raftIndex, fnum => 5, rnum => 6, + type => uint64, occurrence => optional, opts => []}, + #{name => raftTerm, fnum => 6, rnum => 7, + type => uint64, occurrence => optional, opts => []}, + #{name => raftAppliedIndex, fnum => 7, rnum => 8, + type => uint64, occurrence => optional, opts => []}, + #{name => errors, fnum => 8, rnum => 9, type => string, + occurrence => repeated, opts => []}, + #{name => dbSizeInUse, fnum => 9, rnum => 10, + type => int64, occurrence => optional, opts => []}, + #{name => isLearner, fnum => 10, rnum => 11, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthEnableRequest'}, []}, + {{msg, 'Etcd.AuthDisableRequest'}, []}, + {{msg, 'Etcd.AuthenticateRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserAddRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGetRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserDeleteRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserChangePasswordRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGrantRoleRequest'}, + [#{name => user, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserRevokeRoleRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleAddRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGetRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserListRequest'}, []}, + {{msg, 'Etcd.AuthRoleListRequest'}, []}, + {{msg, 'Etcd.AuthRoleDeleteRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGrantPermissionRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleRevokePermissionRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthEnableResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthDisableResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthenticateResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => token, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGetResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthUserDeleteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserChangePasswordResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGrantRoleResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserRevokeRoleResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGetResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthRoleListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthUserListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => users, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthRoleDeleteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGrantPermissionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleRevokePermissionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HealthCheckRequest'}, + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HealthCheckResponse'}, + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LockRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LockResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.UnlockRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.UnlockResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CampaignRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CampaignResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leader, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]}, + {{msg, 'Etcd.LeaderKey'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => rev, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => lease, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaderRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaderResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ResignRequest'}, + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]}, + {{msg, 'Etcd.ResignResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ProclaimRequest'}, + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ProclaimResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}, + {{msg, 'mvccpb.KeyValue'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'mvccpb.Event'}, + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.UserAddOptions'}, + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'authpb.User'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.Permission'}, + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'authpb.Role'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['Etcd.ResponseHeader', 'Etcd.RangeRequest', + 'Etcd.RangeResponse', 'Etcd.PutRequest', + 'Etcd.PutResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.RequestOp', + 'Etcd.ResponseOp', 'Etcd.Compare', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.CompactionRequest', + 'Etcd.CompactionResponse', 'Etcd.HashRequest', + 'Etcd.HashKVRequest', 'Etcd.HashKVResponse', + 'Etcd.HashResponse', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.WatchRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchCancelRequest', + 'Etcd.WatchProgressRequest', 'Etcd.WatchResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseStatus', + 'Etcd.LeaseLeasesResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.MoveLeaderRequest', + 'Etcd.MoveLeaderResponse', 'Etcd.AlarmRequest', + 'Etcd.AlarmMember', 'Etcd.AlarmResponse', + 'Etcd.StatusRequest', 'Etcd.StatusResponse', + 'Etcd.AuthEnableRequest', 'Etcd.AuthDisableRequest', + 'Etcd.AuthenticateRequest', 'Etcd.AuthUserAddRequest', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthRoleAddRequest', 'Etcd.AuthRoleGetRequest', + 'Etcd.AuthUserListRequest', 'Etcd.AuthRoleListRequest', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthDisableResponse', + 'Etcd.AuthenticateResponse', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthRoleAddResponse', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleListResponse', + 'Etcd.AuthUserListResponse', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.HealthCheckRequest', 'Etcd.HealthCheckResponse', + 'Etcd.LockRequest', 'Etcd.LockResponse', + 'Etcd.UnlockRequest', 'Etcd.UnlockResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.LeaderKey', 'Etcd.LeaderRequest', + 'Etcd.LeaderResponse', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ProclaimRequest', + 'Etcd.ProclaimResponse', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo', 'mvccpb.KeyValue', + 'mvccpb.Event', 'authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['Etcd.ResponseHeader', 'Etcd.RangeRequest', + 'Etcd.RangeResponse', 'Etcd.PutRequest', + 'Etcd.PutResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.RequestOp', + 'Etcd.ResponseOp', 'Etcd.Compare', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.CompactionRequest', + 'Etcd.CompactionResponse', 'Etcd.HashRequest', + 'Etcd.HashKVRequest', 'Etcd.HashKVResponse', + 'Etcd.HashResponse', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.WatchRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchCancelRequest', + 'Etcd.WatchProgressRequest', 'Etcd.WatchResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseStatus', + 'Etcd.LeaseLeasesResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.MoveLeaderRequest', + 'Etcd.MoveLeaderResponse', 'Etcd.AlarmRequest', + 'Etcd.AlarmMember', 'Etcd.AlarmResponse', + 'Etcd.StatusRequest', 'Etcd.StatusResponse', + 'Etcd.AuthEnableRequest', 'Etcd.AuthDisableRequest', + 'Etcd.AuthenticateRequest', 'Etcd.AuthUserAddRequest', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthRoleAddRequest', 'Etcd.AuthRoleGetRequest', + 'Etcd.AuthUserListRequest', 'Etcd.AuthRoleListRequest', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthDisableResponse', + 'Etcd.AuthenticateResponse', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthRoleAddResponse', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleListResponse', + 'Etcd.AuthUserListResponse', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.HealthCheckRequest', 'Etcd.HealthCheckResponse', + 'Etcd.LockRequest', 'Etcd.LockResponse', + 'Etcd.UnlockRequest', 'Etcd.UnlockResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.LeaderKey', 'Etcd.LeaderRequest', + 'Etcd.LeaderResponse', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ProclaimRequest', + 'Etcd.ProclaimResponse', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo', 'mvccpb.KeyValue', + 'mvccpb.Event', 'authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role']. + + +get_enum_names() -> + ['Etcd.RangeRequest.SortOrder', + 'Etcd.RangeRequest.SortTarget', + 'Etcd.Compare.CompareResult', + 'Etcd.Compare.CompareTarget', + 'Etcd.WatchCreateRequest.FilterType', 'Etcd.AlarmType', + 'Etcd.AlarmRequest.AlarmAction', + 'Etcd.HealthCheckResponse.ServingStatus', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'mvccpb.Event.EventType', 'authpb.Permission.Type']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('Etcd.ResponseHeader') -> + [#{name => cluster_id, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => member_id, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => revision, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => raft_term, fnum => 4, rnum => 5, + type => uint64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.RangeRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => limit, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => revision, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => sort_order, fnum => 5, rnum => 6, + type => {enum, 'Etcd.RangeRequest.SortOrder'}, + occurrence => optional, opts => []}, + #{name => sort_target, fnum => 6, rnum => 7, + type => {enum, 'Etcd.RangeRequest.SortTarget'}, + occurrence => optional, opts => []}, + #{name => serializable, fnum => 7, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => keys_only, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}, + #{name => count_only, fnum => 9, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => min_mod_revision, fnum => 10, rnum => 11, + type => int64, occurrence => optional, opts => []}, + #{name => max_mod_revision, fnum => 11, rnum => 12, + type => int64, occurrence => optional, opts => []}, + #{name => min_create_revision, fnum => 12, rnum => 13, + type => int64, occurrence => optional, opts => []}, + #{name => max_create_revision, fnum => 13, rnum => 14, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.RangeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kvs, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}, + #{name => more, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => count, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.PutRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => ignore_value, fnum => 5, rnum => 6, + type => bool, occurrence => optional, opts => []}, + #{name => ignore_lease, fnum => 6, rnum => 7, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('Etcd.PutResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.DeleteRangeRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.DeleteRangeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => deleted, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kvs, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.RequestOp') -> + [#{name => request, rnum => 2, + fields => + [#{name => request_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutRequest'}, + occurrence => optional, opts => []}, + #{name => request_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnRequest'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.ResponseOp') -> + [#{name => response, rnum => 2, + fields => + [#{name => response_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutResponse'}, + occurrence => optional, opts => []}, + #{name => response_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnResponse'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.Compare') -> + [#{name => result, fnum => 1, rnum => 2, + type => {enum, 'Etcd.Compare.CompareResult'}, + occurrence => optional, opts => []}, + #{name => target, fnum => 2, rnum => 3, + type => {enum, 'Etcd.Compare.CompareTarget'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}, + #{name => target_union, rnum => 5, + fields => + [#{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 6, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => value, fnum => 7, rnum => 5, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 8, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + #{name => range_end, fnum => 64, rnum => 6, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('Etcd.TxnRequest') -> + [#{name => compare, fnum => 1, rnum => 2, + type => {msg, 'Etcd.Compare'}, occurrence => repeated, + opts => []}, + #{name => success, fnum => 2, rnum => 3, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}, + #{name => failure, fnum => 3, rnum => 4, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.TxnResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => succeeded, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => responses, fnum => 3, rnum => 4, + type => {msg, 'Etcd.ResponseOp'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.CompactionRequest') -> + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}, + #{name => physical, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CompactionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashRequest') -> []; +find_msg_def('Etcd.HashKVRequest') -> + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashKVResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.SnapshotRequest') -> []; +find_msg_def('Etcd.SnapshotResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => remaining_bytes, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => blob, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchRequest') -> + [#{name => request_union, rnum => 2, + fields => + [#{name => create_request, fnum => 1, rnum => 2, + type => {msg, 'Etcd.WatchCreateRequest'}, + occurrence => optional, opts => []}, + #{name => cancel_request, fnum => 2, rnum => 2, + type => {msg, 'Etcd.WatchCancelRequest'}, + occurrence => optional, opts => []}, + #{name => progress_request, fnum => 3, rnum => 2, + type => {msg, 'Etcd.WatchProgressRequest'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.WatchCreateRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => start_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => progress_notify, fnum => 4, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => filters, fnum => 5, rnum => 6, + type => {enum, 'Etcd.WatchCreateRequest.FilterType'}, + occurrence => repeated, opts => [packed]}, + #{name => prev_kv, fnum => 6, rnum => 7, type => bool, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 7, rnum => 8, type => int64, + occurrence => optional, opts => []}, + #{name => fragment, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchCancelRequest') -> + [#{name => watch_id, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchProgressRequest') -> []; +find_msg_def('Etcd.WatchResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => created, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => canceled, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 5, rnum => 6, + type => int64, occurrence => optional, opts => []}, + #{name => cancel_reason, fnum => 6, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => fragment, fnum => 7, rnum => 8, type => bool, + occurrence => optional, opts => []}, + #{name => events, fnum => 11, rnum => 9, + type => {msg, 'mvccpb.Event'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.LeaseGrantRequest') -> + [#{name => 'TTL', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseGrantResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => error, fnum => 4, rnum => 5, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseRevokeRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseRevokeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseCheckpoint') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => remaining_TTL, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseCheckpointRequest') -> + [#{name => checkpoints, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaseCheckpoint'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.LeaseCheckpointResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseKeepAliveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseKeepAliveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseTimeToLiveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => keys, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseTimeToLiveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => grantedTTL, fnum => 4, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => keys, fnum => 5, rnum => 6, type => bytes, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.LeaseLeasesRequest') -> []; +find_msg_def('Etcd.LeaseStatus') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseLeasesResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leases, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaseStatus'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.Member') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => name, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => clientURLs, fnum => 4, rnum => 5, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 5, rnum => 6, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberAddRequest') -> + [#{name => peerURLs, fnum => 1, rnum => 2, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => member, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => optional, + opts => []}, + #{name => members, fnum => 3, rnum => 4, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberRemoveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberRemoveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberUpdateRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 2, rnum => 3, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('Etcd.MemberUpdateResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberListRequest') -> []; +find_msg_def('Etcd.MemberListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberPromoteRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberPromoteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.DefragmentRequest') -> []; +find_msg_def('Etcd.DefragmentResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MoveLeaderRequest') -> + [#{name => targetID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.MoveLeaderResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmRequest') -> + [#{name => action, fnum => 1, rnum => 2, + type => {enum, 'Etcd.AlarmRequest.AlarmAction'}, + occurrence => optional, opts => []}, + #{name => memberID, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 3, rnum => 4, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmMember') -> + [#{name => memberID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 2, rnum => 3, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => alarms, fnum => 2, rnum => 3, + type => {msg, 'Etcd.AlarmMember'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.StatusRequest') -> []; +find_msg_def('Etcd.StatusResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => version, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dbSize, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => leader, fnum => 4, rnum => 5, type => uint64, + occurrence => optional, opts => []}, + #{name => raftIndex, fnum => 5, rnum => 6, + type => uint64, occurrence => optional, opts => []}, + #{name => raftTerm, fnum => 6, rnum => 7, + type => uint64, occurrence => optional, opts => []}, + #{name => raftAppliedIndex, fnum => 7, rnum => 8, + type => uint64, occurrence => optional, opts => []}, + #{name => errors, fnum => 8, rnum => 9, type => string, + occurrence => repeated, opts => []}, + #{name => dbSizeInUse, fnum => 9, rnum => 10, + type => int64, occurrence => optional, opts => []}, + #{name => isLearner, fnum => 10, rnum => 11, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthEnableRequest') -> []; +find_msg_def('Etcd.AuthDisableRequest') -> []; +find_msg_def('Etcd.AuthenticateRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserAddRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGetRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserDeleteRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserChangePasswordRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGrantRoleRequest') -> + [#{name => user, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserRevokeRoleRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleAddRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGetRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserListRequest') -> []; +find_msg_def('Etcd.AuthRoleListRequest') -> []; +find_msg_def('Etcd.AuthRoleDeleteRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGrantPermissionRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleRevokePermissionRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthEnableResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthDisableResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthenticateResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => token, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGetResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthUserDeleteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserChangePasswordResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGrantRoleResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserRevokeRoleResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGetResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthRoleListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthUserListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => users, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthRoleDeleteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGrantPermissionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleRevokePermissionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.HealthCheckRequest') -> + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HealthCheckResponse') -> + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LockRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LockResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.UnlockRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.UnlockResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CampaignRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CampaignResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leader, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]; +find_msg_def('Etcd.LeaderKey') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => rev, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => lease, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaderRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaderResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ResignRequest') -> + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]; +find_msg_def('Etcd.ResignResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ProclaimRequest') -> + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ProclaimResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def('mvccpb.KeyValue') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('mvccpb.Event') -> + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.UserAddOptions') -> + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('authpb.User') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.Permission') -> + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('authpb.Role') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('Etcd.RangeRequest.SortOrder') -> + [{'NONE', 0}, {'ASCEND', 1}, {'DESCEND', 2}]; +find_enum_def('Etcd.RangeRequest.SortTarget') -> + [{'KEY', 0}, {'VERSION', 1}, {'CREATE', 2}, {'MOD', 3}, + {'VALUE', 4}]; +find_enum_def('Etcd.Compare.CompareResult') -> + [{'EQUAL', 0}, {'GREATER', 1}, {'LESS', 2}, + {'NOT_EQUAL', 3}]; +find_enum_def('Etcd.Compare.CompareTarget') -> + [{'VERSION', 0}, {'CREATE', 1}, {'MOD', 2}, + {'VALUE', 3}, {'LEASE', 4}]; +find_enum_def('Etcd.WatchCreateRequest.FilterType') -> + [{'NOPUT', 0}, {'NODELETE', 1}]; +find_enum_def('Etcd.AlarmType') -> + [{'NONE', 0}, {'NOSPACE', 1}, {'CORRUPT', 2}]; +find_enum_def('Etcd.AlarmRequest.AlarmAction') -> + [{'GET', 0}, {'ACTIVATE', 1}, {'DEACTIVATE', 2}]; +find_enum_def('Etcd.HealthCheckResponse.ServingStatus') -> + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'TYPE_DOUBLE', 1}, {'TYPE_FLOAT', 2}, + {'TYPE_INT64', 3}, {'TYPE_UINT64', 4}, + {'TYPE_INT32', 5}, {'TYPE_FIXED64', 6}, + {'TYPE_FIXED32', 7}, {'TYPE_BOOL', 8}, + {'TYPE_STRING', 9}, {'TYPE_GROUP', 10}, + {'TYPE_MESSAGE', 11}, {'TYPE_BYTES', 12}, + {'TYPE_UINT32', 13}, {'TYPE_ENUM', 14}, + {'TYPE_SFIXED32', 15}, {'TYPE_SFIXED64', 16}, + {'TYPE_SINT32', 17}, {'TYPE_SINT64', 18}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def('mvccpb.Event.EventType') -> + [{'PUT', 0}, {'DELETE', 1}]; +find_enum_def('authpb.Permission.Type') -> + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('Etcd.RangeRequest.SortOrder', + Value) -> + 'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(Value); +enum_symbol_by_value('Etcd.RangeRequest.SortTarget', + Value) -> + 'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(Value); +enum_symbol_by_value('Etcd.Compare.CompareResult', + Value) -> + 'enum_symbol_by_value_Etcd.Compare.CompareResult'(Value); +enum_symbol_by_value('Etcd.Compare.CompareTarget', + Value) -> + 'enum_symbol_by_value_Etcd.Compare.CompareTarget'(Value); +enum_symbol_by_value('Etcd.WatchCreateRequest.FilterType', + Value) -> + 'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(Value); +enum_symbol_by_value('Etcd.AlarmType', Value) -> + 'enum_symbol_by_value_Etcd.AlarmType'(Value); +enum_symbol_by_value('Etcd.AlarmRequest.AlarmAction', + Value) -> + 'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(Value); +enum_symbol_by_value('Etcd.HealthCheckResponse.ServingStatus', + Value) -> + 'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value); +enum_symbol_by_value('mvccpb.Event.EventType', Value) -> + 'enum_symbol_by_value_mvccpb.Event.EventType'(Value); +enum_symbol_by_value('authpb.Permission.Type', Value) -> + 'enum_symbol_by_value_authpb.Permission.Type'(Value). + + +enum_value_by_symbol('Etcd.RangeRequest.SortOrder', + Sym) -> + 'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'(Sym); +enum_value_by_symbol('Etcd.RangeRequest.SortTarget', + Sym) -> + 'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'(Sym); +enum_value_by_symbol('Etcd.Compare.CompareResult', + Sym) -> + 'enum_value_by_symbol_Etcd.Compare.CompareResult'(Sym); +enum_value_by_symbol('Etcd.Compare.CompareTarget', + Sym) -> + 'enum_value_by_symbol_Etcd.Compare.CompareTarget'(Sym); +enum_value_by_symbol('Etcd.WatchCreateRequest.FilterType', + Sym) -> + 'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'(Sym); +enum_value_by_symbol('Etcd.AlarmType', Sym) -> + 'enum_value_by_symbol_Etcd.AlarmType'(Sym); +enum_value_by_symbol('Etcd.AlarmRequest.AlarmAction', + Sym) -> + 'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'(Sym); +enum_value_by_symbol('Etcd.HealthCheckResponse.ServingStatus', + Sym) -> + 'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym); +enum_value_by_symbol('mvccpb.Event.EventType', Sym) -> + 'enum_value_by_symbol_mvccpb.Event.EventType'(Sym); +enum_value_by_symbol('authpb.Permission.Type', Sym) -> + 'enum_value_by_symbol_authpb.Permission.Type'(Sym). + + +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(0) -> + 'NONE'; +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(1) -> + 'ASCEND'; +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(2) -> + 'DESCEND'. + + +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('NONE') -> + 0; +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('ASCEND') -> + 1; +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('DESCEND') -> + 2. + +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(0) -> + 'KEY'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(1) -> + 'VERSION'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(2) -> + 'CREATE'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(3) -> + 'MOD'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(4) -> + 'VALUE'. + + +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('KEY') -> + 0; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('VERSION') -> + 1; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('CREATE') -> + 2; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('MOD') -> + 3; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('VALUE') -> + 4. + +'enum_symbol_by_value_Etcd.Compare.CompareResult'(0) -> + 'EQUAL'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(1) -> + 'GREATER'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(2) -> + 'LESS'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(3) -> + 'NOT_EQUAL'. + + +'enum_value_by_symbol_Etcd.Compare.CompareResult'('EQUAL') -> + 0; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('GREATER') -> + 1; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('LESS') -> + 2; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('NOT_EQUAL') -> + 3. + +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(0) -> + 'VERSION'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(1) -> + 'CREATE'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(2) -> + 'MOD'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(3) -> + 'VALUE'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(4) -> + 'LEASE'. + + +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('VERSION') -> + 0; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('CREATE') -> + 1; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('MOD') -> + 2; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('VALUE') -> + 3; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('LEASE') -> + 4. + +'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(0) -> + 'NOPUT'; +'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(1) -> + 'NODELETE'. + + +'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'('NOPUT') -> + 0; +'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'('NODELETE') -> + 1. + +'enum_symbol_by_value_Etcd.AlarmType'(0) -> 'NONE'; +'enum_symbol_by_value_Etcd.AlarmType'(1) -> 'NOSPACE'; +'enum_symbol_by_value_Etcd.AlarmType'(2) -> 'CORRUPT'. + + +'enum_value_by_symbol_Etcd.AlarmType'('NONE') -> 0; +'enum_value_by_symbol_Etcd.AlarmType'('NOSPACE') -> 1; +'enum_value_by_symbol_Etcd.AlarmType'('CORRUPT') -> 2. + +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(0) -> + 'GET'; +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(1) -> + 'ACTIVATE'; +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(2) -> + 'DEACTIVATE'. + + +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('GET') -> + 0; +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('ACTIVATE') -> + 1; +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE') -> + 2. + +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'. + + +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN') -> + 0; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('SERVING') -> + 1; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING') -> + 2; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + +'enum_symbol_by_value_mvccpb.Event.EventType'(0) -> + 'PUT'; +'enum_symbol_by_value_mvccpb.Event.EventType'(1) -> + 'DELETE'. + + +'enum_value_by_symbol_mvccpb.Event.EventType'('PUT') -> + 0; +'enum_value_by_symbol_mvccpb.Event.EventType'('DELETE') -> + 1. + +'enum_symbol_by_value_authpb.Permission.Type'(0) -> + 'READ'; +'enum_symbol_by_value_authpb.Permission.Type'(1) -> + 'WRITE'; +'enum_symbol_by_value_authpb.Permission.Type'(2) -> + 'READWRITE'. + + +'enum_value_by_symbol_authpb.Permission.Type'('READ') -> + 0; +'enum_value_by_symbol_authpb.Permission.Type'('WRITE') -> + 1; +'enum_value_by_symbol_authpb.Permission.Type'('READWRITE') -> + 2. + + +get_service_names() -> + ['Etcd.KV', 'Etcd.Watch', 'Etcd.Lease', 'Etcd.Cluster', + 'Etcd.Maintenance', 'Etcd.Auth', 'Etcd.Health', + 'Etcd.Lock', 'Etcd.Election']. + + +get_service_def('Etcd.KV') -> + {{service, 'Etcd.KV'}, + [#{name => 'Range', input => 'Etcd.RangeRequest', + output => 'Etcd.RangeResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Put', input => 'Etcd.PutRequest', + output => 'Etcd.PutResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'DeleteRange', + input => 'Etcd.DeleteRangeRequest', + output => 'Etcd.DeleteRangeResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Txn', input => 'Etcd.TxnRequest', + output => 'Etcd.TxnResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Compact', input => 'Etcd.CompactionRequest', + output => 'Etcd.CompactionResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Watch') -> + {{service, 'Etcd.Watch'}, + [#{name => 'Watch', input => 'Etcd.WatchRequest', + output => 'Etcd.WatchResponse', input_stream => true, + output_stream => true, opts => []}]}; +get_service_def('Etcd.Lease') -> + {{service, 'Etcd.Lease'}, + [#{name => 'LeaseGrant', + input => 'Etcd.LeaseGrantRequest', + output => 'Etcd.LeaseGrantResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseRevoke', + input => 'Etcd.LeaseRevokeRequest', + output => 'Etcd.LeaseRevokeResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseKeepAlive', + input => 'Etcd.LeaseKeepAliveRequest', + output => 'Etcd.LeaseKeepAliveResponse', + input_stream => true, output_stream => true, + opts => []}, + #{name => 'LeaseTimeToLive', + input => 'Etcd.LeaseTimeToLiveRequest', + output => 'Etcd.LeaseTimeToLiveResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseLeases', + input => 'Etcd.LeaseLeasesRequest', + output => 'Etcd.LeaseLeasesResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Cluster') -> + {{service, 'Etcd.Cluster'}, + [#{name => 'MemberAdd', + input => 'Etcd.MemberAddRequest', + output => 'Etcd.MemberAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberRemove', + input => 'Etcd.MemberRemoveRequest', + output => 'Etcd.MemberRemoveResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberUpdate', + input => 'Etcd.MemberUpdateRequest', + output => 'Etcd.MemberUpdateResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberList', + input => 'Etcd.MemberListRequest', + output => 'Etcd.MemberListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberPromote', + input => 'Etcd.MemberPromoteRequest', + output => 'Etcd.MemberPromoteResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Maintenance') -> + {{service, 'Etcd.Maintenance'}, + [#{name => 'Alarm', input => 'Etcd.AlarmRequest', + output => 'Etcd.AlarmResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Status', input => 'Etcd.StatusRequest', + output => 'Etcd.StatusResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Defragment', + input => 'Etcd.DefragmentRequest', + output => 'Etcd.DefragmentResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Hash', input => 'Etcd.HashRequest', + output => 'Etcd.HashResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'HashKV', input => 'Etcd.HashKVRequest', + output => 'Etcd.HashKVResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Snapshot', input => 'Etcd.SnapshotRequest', + output => 'Etcd.SnapshotResponse', + input_stream => false, output_stream => true, + opts => []}, + #{name => 'MoveLeader', + input => 'Etcd.MoveLeaderRequest', + output => 'Etcd.MoveLeaderResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Auth') -> + {{service, 'Etcd.Auth'}, + [#{name => 'AuthEnable', + input => 'Etcd.AuthEnableRequest', + output => 'Etcd.AuthEnableResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'AuthDisable', + input => 'Etcd.AuthDisableRequest', + output => 'Etcd.AuthDisableResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Authenticate', + input => 'Etcd.AuthenticateRequest', + output => 'Etcd.AuthenticateResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserAdd', input => 'Etcd.AuthUserAddRequest', + output => 'Etcd.AuthUserAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserGet', input => 'Etcd.AuthUserGetRequest', + output => 'Etcd.AuthUserGetResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserList', + input => 'Etcd.AuthUserListRequest', + output => 'Etcd.AuthUserListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserDelete', + input => 'Etcd.AuthUserDeleteRequest', + output => 'Etcd.AuthUserDeleteResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserChangePassword', + input => 'Etcd.AuthUserChangePasswordRequest', + output => 'Etcd.AuthUserChangePasswordResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserGrantRole', + input => 'Etcd.AuthUserGrantRoleRequest', + output => 'Etcd.AuthUserGrantRoleResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserRevokeRole', + input => 'Etcd.AuthUserRevokeRoleRequest', + output => 'Etcd.AuthUserRevokeRoleResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleAdd', input => 'Etcd.AuthRoleAddRequest', + output => 'Etcd.AuthRoleAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleGet', input => 'Etcd.AuthRoleGetRequest', + output => 'Etcd.AuthRoleGetResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleList', + input => 'Etcd.AuthRoleListRequest', + output => 'Etcd.AuthRoleListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleDelete', + input => 'Etcd.AuthRoleDeleteRequest', + output => 'Etcd.AuthRoleDeleteResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleGrantPermission', + input => 'Etcd.AuthRoleGrantPermissionRequest', + output => 'Etcd.AuthRoleGrantPermissionResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleRevokePermission', + input => 'Etcd.AuthRoleRevokePermissionRequest', + output => 'Etcd.AuthRoleRevokePermissionResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Health') -> + {{service, 'Etcd.Health'}, + [#{name => 'Check', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Watch', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}]}; +get_service_def('Etcd.Lock') -> + {{service, 'Etcd.Lock'}, + [#{name => 'Lock', input => 'Etcd.LockRequest', + output => 'Etcd.LockResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Unlock', input => 'Etcd.UnlockRequest', + output => 'Etcd.UnlockResponse', input_stream => false, + output_stream => false, opts => []}]}; +get_service_def('Etcd.Election') -> + {{service, 'Etcd.Election'}, + [#{name => 'Campaign', input => 'Etcd.CampaignRequest', + output => 'Etcd.CampaignResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Proclaim', input => 'Etcd.ProclaimRequest', + output => 'Etcd.ProclaimResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Leader', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Observe', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => true, + output_stream => true, opts => []}, + #{name => 'Resign', input => 'Etcd.ResignRequest', + output => 'Etcd.ResignResponse', input_stream => false, + output_stream => false, opts => []}]}; +get_service_def(_) -> error. + + +get_rpc_names('Etcd.KV') -> + ['Range', 'Put', 'DeleteRange', 'Txn', 'Compact']; +get_rpc_names('Etcd.Watch') -> ['Watch']; +get_rpc_names('Etcd.Lease') -> + ['LeaseGrant', 'LeaseRevoke', 'LeaseKeepAlive', + 'LeaseTimeToLive', 'LeaseLeases']; +get_rpc_names('Etcd.Cluster') -> + ['MemberAdd', 'MemberRemove', 'MemberUpdate', + 'MemberList', 'MemberPromote']; +get_rpc_names('Etcd.Maintenance') -> + ['Alarm', 'Status', 'Defragment', 'Hash', 'HashKV', + 'Snapshot', 'MoveLeader']; +get_rpc_names('Etcd.Auth') -> + ['AuthEnable', 'AuthDisable', 'Authenticate', 'UserAdd', + 'UserGet', 'UserList', 'UserDelete', + 'UserChangePassword', 'UserGrantRole', 'UserRevokeRole', + 'RoleAdd', 'RoleGet', 'RoleList', 'RoleDelete', + 'RoleGrantPermission', 'RoleRevokePermission']; +get_rpc_names('Etcd.Health') -> ['Check', 'Watch']; +get_rpc_names('Etcd.Lock') -> ['Lock', 'Unlock']; +get_rpc_names('Etcd.Election') -> + ['Campaign', 'Proclaim', 'Leader', 'Observe', 'Resign']; +get_rpc_names(_) -> error. + + +find_rpc_def('Etcd.KV', RpcName) -> + 'find_rpc_def_Etcd.KV'(RpcName); +find_rpc_def('Etcd.Watch', RpcName) -> + 'find_rpc_def_Etcd.Watch'(RpcName); +find_rpc_def('Etcd.Lease', RpcName) -> + 'find_rpc_def_Etcd.Lease'(RpcName); +find_rpc_def('Etcd.Cluster', RpcName) -> + 'find_rpc_def_Etcd.Cluster'(RpcName); +find_rpc_def('Etcd.Maintenance', RpcName) -> + 'find_rpc_def_Etcd.Maintenance'(RpcName); +find_rpc_def('Etcd.Auth', RpcName) -> + 'find_rpc_def_Etcd.Auth'(RpcName); +find_rpc_def('Etcd.Health', RpcName) -> + 'find_rpc_def_Etcd.Health'(RpcName); +find_rpc_def('Etcd.Lock', RpcName) -> + 'find_rpc_def_Etcd.Lock'(RpcName); +find_rpc_def('Etcd.Election', RpcName) -> + 'find_rpc_def_Etcd.Election'(RpcName); +find_rpc_def(_, _) -> error. + + +'find_rpc_def_Etcd.KV'('Range') -> + #{name => 'Range', input => 'Etcd.RangeRequest', + output => 'Etcd.RangeResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('Put') -> + #{name => 'Put', input => 'Etcd.PutRequest', + output => 'Etcd.PutResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('DeleteRange') -> + #{name => 'DeleteRange', + input => 'Etcd.DeleteRangeRequest', + output => 'Etcd.DeleteRangeResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.KV'('Txn') -> + #{name => 'Txn', input => 'Etcd.TxnRequest', + output => 'Etcd.TxnResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('Compact') -> + #{name => 'Compact', input => 'Etcd.CompactionRequest', + output => 'Etcd.CompactionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.KV'(_) -> error. + +'find_rpc_def_Etcd.Watch'('Watch') -> + #{name => 'Watch', input => 'Etcd.WatchRequest', + output => 'Etcd.WatchResponse', input_stream => true, + output_stream => true, opts => []}; +'find_rpc_def_Etcd.Watch'(_) -> error. + +'find_rpc_def_Etcd.Lease'('LeaseGrant') -> + #{name => 'LeaseGrant', + input => 'Etcd.LeaseGrantRequest', + output => 'Etcd.LeaseGrantResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseRevoke') -> + #{name => 'LeaseRevoke', + input => 'Etcd.LeaseRevokeRequest', + output => 'Etcd.LeaseRevokeResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseKeepAlive') -> + #{name => 'LeaseKeepAlive', + input => 'Etcd.LeaseKeepAliveRequest', + output => 'Etcd.LeaseKeepAliveResponse', + input_stream => true, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseTimeToLive') -> + #{name => 'LeaseTimeToLive', + input => 'Etcd.LeaseTimeToLiveRequest', + output => 'Etcd.LeaseTimeToLiveResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseLeases') -> + #{name => 'LeaseLeases', + input => 'Etcd.LeaseLeasesRequest', + output => 'Etcd.LeaseLeasesResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'(_) -> error. + +'find_rpc_def_Etcd.Cluster'('MemberAdd') -> + #{name => 'MemberAdd', input => 'Etcd.MemberAddRequest', + output => 'Etcd.MemberAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberRemove') -> + #{name => 'MemberRemove', + input => 'Etcd.MemberRemoveRequest', + output => 'Etcd.MemberRemoveResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberUpdate') -> + #{name => 'MemberUpdate', + input => 'Etcd.MemberUpdateRequest', + output => 'Etcd.MemberUpdateResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberList') -> + #{name => 'MemberList', + input => 'Etcd.MemberListRequest', + output => 'Etcd.MemberListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberPromote') -> + #{name => 'MemberPromote', + input => 'Etcd.MemberPromoteRequest', + output => 'Etcd.MemberPromoteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'(_) -> error. + +'find_rpc_def_Etcd.Maintenance'('Alarm') -> + #{name => 'Alarm', input => 'Etcd.AlarmRequest', + output => 'Etcd.AlarmResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Status') -> + #{name => 'Status', input => 'Etcd.StatusRequest', + output => 'Etcd.StatusResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Defragment') -> + #{name => 'Defragment', + input => 'Etcd.DefragmentRequest', + output => 'Etcd.DefragmentResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Maintenance'('Hash') -> + #{name => 'Hash', input => 'Etcd.HashRequest', + output => 'Etcd.HashResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('HashKV') -> + #{name => 'HashKV', input => 'Etcd.HashKVRequest', + output => 'Etcd.HashKVResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Snapshot') -> + #{name => 'Snapshot', input => 'Etcd.SnapshotRequest', + output => 'Etcd.SnapshotResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Maintenance'('MoveLeader') -> + #{name => 'MoveLeader', + input => 'Etcd.MoveLeaderRequest', + output => 'Etcd.MoveLeaderResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Maintenance'(_) -> error. + +'find_rpc_def_Etcd.Auth'('AuthEnable') -> + #{name => 'AuthEnable', + input => 'Etcd.AuthEnableRequest', + output => 'Etcd.AuthEnableResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('AuthDisable') -> + #{name => 'AuthDisable', + input => 'Etcd.AuthDisableRequest', + output => 'Etcd.AuthDisableResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('Authenticate') -> + #{name => 'Authenticate', + input => 'Etcd.AuthenticateRequest', + output => 'Etcd.AuthenticateResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserAdd') -> + #{name => 'UserAdd', input => 'Etcd.AuthUserAddRequest', + output => 'Etcd.AuthUserAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserGet') -> + #{name => 'UserGet', input => 'Etcd.AuthUserGetRequest', + output => 'Etcd.AuthUserGetResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserList') -> + #{name => 'UserList', + input => 'Etcd.AuthUserListRequest', + output => 'Etcd.AuthUserListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserDelete') -> + #{name => 'UserDelete', + input => 'Etcd.AuthUserDeleteRequest', + output => 'Etcd.AuthUserDeleteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserChangePassword') -> + #{name => 'UserChangePassword', + input => 'Etcd.AuthUserChangePasswordRequest', + output => 'Etcd.AuthUserChangePasswordResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserGrantRole') -> + #{name => 'UserGrantRole', + input => 'Etcd.AuthUserGrantRoleRequest', + output => 'Etcd.AuthUserGrantRoleResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserRevokeRole') -> + #{name => 'UserRevokeRole', + input => 'Etcd.AuthUserRevokeRoleRequest', + output => 'Etcd.AuthUserRevokeRoleResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleAdd') -> + #{name => 'RoleAdd', input => 'Etcd.AuthRoleAddRequest', + output => 'Etcd.AuthRoleAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleGet') -> + #{name => 'RoleGet', input => 'Etcd.AuthRoleGetRequest', + output => 'Etcd.AuthRoleGetResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleList') -> + #{name => 'RoleList', + input => 'Etcd.AuthRoleListRequest', + output => 'Etcd.AuthRoleListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleDelete') -> + #{name => 'RoleDelete', + input => 'Etcd.AuthRoleDeleteRequest', + output => 'Etcd.AuthRoleDeleteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleGrantPermission') -> + #{name => 'RoleGrantPermission', + input => 'Etcd.AuthRoleGrantPermissionRequest', + output => 'Etcd.AuthRoleGrantPermissionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleRevokePermission') -> + #{name => 'RoleRevokePermission', + input => 'Etcd.AuthRoleRevokePermissionRequest', + output => 'Etcd.AuthRoleRevokePermissionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'(_) -> error. + +'find_rpc_def_Etcd.Health'('Check') -> + #{name => 'Check', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Health'('Watch') -> + #{name => 'Watch', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Health'(_) -> error. + +'find_rpc_def_Etcd.Lock'('Lock') -> + #{name => 'Lock', input => 'Etcd.LockRequest', + output => 'Etcd.LockResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Lock'('Unlock') -> + #{name => 'Unlock', input => 'Etcd.UnlockRequest', + output => 'Etcd.UnlockResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Lock'(_) -> error. + +'find_rpc_def_Etcd.Election'('Campaign') -> + #{name => 'Campaign', input => 'Etcd.CampaignRequest', + output => 'Etcd.CampaignResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Election'('Proclaim') -> + #{name => 'Proclaim', input => 'Etcd.ProclaimRequest', + output => 'Etcd.ProclaimResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Election'('Leader') -> + #{name => 'Leader', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Election'('Observe') -> + #{name => 'Observe', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => true, + output_stream => true, opts => []}; +'find_rpc_def_Etcd.Election'('Resign') -> + #{name => 'Resign', input => 'Etcd.ResignRequest', + output => 'Etcd.ResignResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Election'(_) -> error. + + +fetch_rpc_def(ServiceName, RpcName) -> + case find_rpc_def(ServiceName, RpcName) of + Def when is_map(Def) -> Def; + error -> + erlang:error({no_such_rpc, ServiceName, RpcName}) + end. + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +fqbin_to_service_name(<<"Etcd.KV">>) -> 'Etcd.KV'; +fqbin_to_service_name(<<"Etcd.Watch">>) -> 'Etcd.Watch'; +fqbin_to_service_name(<<"Etcd.Lease">>) -> 'Etcd.Lease'; +fqbin_to_service_name(<<"Etcd.Cluster">>) -> 'Etcd.Cluster'; +fqbin_to_service_name(<<"Etcd.Maintenance">>) -> 'Etcd.Maintenance'; +fqbin_to_service_name(<<"Etcd.Auth">>) -> 'Etcd.Auth'; +fqbin_to_service_name(<<"Etcd.Health">>) -> 'Etcd.Health'; +fqbin_to_service_name(<<"Etcd.Lock">>) -> 'Etcd.Lock'; +fqbin_to_service_name(<<"Etcd.Election">>) -> 'Etcd.Election'; +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +service_name_to_fqbin('Etcd.KV') -> <<"Etcd.KV">>; +service_name_to_fqbin('Etcd.Watch') -> <<"Etcd.Watch">>; +service_name_to_fqbin('Etcd.Lease') -> <<"Etcd.Lease">>; +service_name_to_fqbin('Etcd.Cluster') -> <<"Etcd.Cluster">>; +service_name_to_fqbin('Etcd.Maintenance') -> <<"Etcd.Maintenance">>; +service_name_to_fqbin('Etcd.Auth') -> <<"Etcd.Auth">>; +service_name_to_fqbin('Etcd.Health') -> <<"Etcd.Health">>; +service_name_to_fqbin('Etcd.Lock') -> <<"Etcd.Lock">>; +service_name_to_fqbin('Etcd.Election') -> <<"Etcd.Election">>; +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Range">>) -> + {'Etcd.KV', 'Range'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Put">>) -> + {'Etcd.KV', 'Put'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"DeleteRange">>) -> + {'Etcd.KV', 'DeleteRange'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Txn">>) -> + {'Etcd.KV', 'Txn'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Compact">>) -> + {'Etcd.KV', 'Compact'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Watch">>, <<"Watch">>) -> + {'Etcd.Watch', 'Watch'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseGrant">>) -> + {'Etcd.Lease', 'LeaseGrant'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseRevoke">>) -> + {'Etcd.Lease', 'LeaseRevoke'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseKeepAlive">>) -> + {'Etcd.Lease', 'LeaseKeepAlive'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseTimeToLive">>) -> + {'Etcd.Lease', 'LeaseTimeToLive'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseLeases">>) -> + {'Etcd.Lease', 'LeaseLeases'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberAdd">>) -> + {'Etcd.Cluster', 'MemberAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberRemove">>) -> + {'Etcd.Cluster', 'MemberRemove'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberUpdate">>) -> + {'Etcd.Cluster', 'MemberUpdate'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberList">>) -> + {'Etcd.Cluster', 'MemberList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberPromote">>) -> + {'Etcd.Cluster', 'MemberPromote'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Alarm">>) -> + {'Etcd.Maintenance', 'Alarm'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Status">>) -> + {'Etcd.Maintenance', 'Status'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Defragment">>) -> + {'Etcd.Maintenance', 'Defragment'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Hash">>) -> + {'Etcd.Maintenance', 'Hash'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"HashKV">>) -> + {'Etcd.Maintenance', 'HashKV'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Snapshot">>) -> + {'Etcd.Maintenance', 'Snapshot'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"MoveLeader">>) -> + {'Etcd.Maintenance', 'MoveLeader'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"AuthEnable">>) -> + {'Etcd.Auth', 'AuthEnable'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"AuthDisable">>) -> + {'Etcd.Auth', 'AuthDisable'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"Authenticate">>) -> + {'Etcd.Auth', 'Authenticate'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserAdd">>) -> + {'Etcd.Auth', 'UserAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserGet">>) -> + {'Etcd.Auth', 'UserGet'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserList">>) -> + {'Etcd.Auth', 'UserList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserDelete">>) -> + {'Etcd.Auth', 'UserDelete'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserChangePassword">>) -> + {'Etcd.Auth', 'UserChangePassword'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserGrantRole">>) -> + {'Etcd.Auth', 'UserGrantRole'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserRevokeRole">>) -> + {'Etcd.Auth', 'UserRevokeRole'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleAdd">>) -> + {'Etcd.Auth', 'RoleAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleGet">>) -> + {'Etcd.Auth', 'RoleGet'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleList">>) -> + {'Etcd.Auth', 'RoleList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleDelete">>) -> + {'Etcd.Auth', 'RoleDelete'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleGrantPermission">>) -> + {'Etcd.Auth', 'RoleGrantPermission'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleRevokePermission">>) -> + {'Etcd.Auth', 'RoleRevokePermission'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Health">>, <<"Check">>) -> + {'Etcd.Health', 'Check'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Health">>, <<"Watch">>) -> + {'Etcd.Health', 'Watch'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lock">>, <<"Lock">>) -> + {'Etcd.Lock', 'Lock'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lock">>, <<"Unlock">>) -> + {'Etcd.Lock', 'Unlock'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Campaign">>) -> + {'Etcd.Election', 'Campaign'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Proclaim">>) -> + {'Etcd.Election', 'Proclaim'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Leader">>) -> + {'Etcd.Election', 'Leader'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Observe">>) -> + {'Etcd.Election', 'Observe'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Resign">>) -> + {'Etcd.Election', 'Resign'}; +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +service_and_rpc_name_to_fqbins('Etcd.KV', 'Range') -> + {<<"Etcd.KV">>, <<"Range">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Put') -> + {<<"Etcd.KV">>, <<"Put">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', + 'DeleteRange') -> + {<<"Etcd.KV">>, <<"DeleteRange">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Txn') -> + {<<"Etcd.KV">>, <<"Txn">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Compact') -> + {<<"Etcd.KV">>, <<"Compact">>}; +service_and_rpc_name_to_fqbins('Etcd.Watch', 'Watch') -> + {<<"Etcd.Watch">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseGrant') -> + {<<"Etcd.Lease">>, <<"LeaseGrant">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseRevoke') -> + {<<"Etcd.Lease">>, <<"LeaseRevoke">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseKeepAlive') -> + {<<"Etcd.Lease">>, <<"LeaseKeepAlive">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseTimeToLive') -> + {<<"Etcd.Lease">>, <<"LeaseTimeToLive">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseLeases') -> + {<<"Etcd.Lease">>, <<"LeaseLeases">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberAdd') -> + {<<"Etcd.Cluster">>, <<"MemberAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberRemove') -> + {<<"Etcd.Cluster">>, <<"MemberRemove">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberUpdate') -> + {<<"Etcd.Cluster">>, <<"MemberUpdate">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberList') -> + {<<"Etcd.Cluster">>, <<"MemberList">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberPromote') -> + {<<"Etcd.Cluster">>, <<"MemberPromote">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Alarm') -> + {<<"Etcd.Maintenance">>, <<"Alarm">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Status') -> + {<<"Etcd.Maintenance">>, <<"Status">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Defragment') -> + {<<"Etcd.Maintenance">>, <<"Defragment">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Hash') -> + {<<"Etcd.Maintenance">>, <<"Hash">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'HashKV') -> + {<<"Etcd.Maintenance">>, <<"HashKV">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Snapshot') -> + {<<"Etcd.Maintenance">>, <<"Snapshot">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'MoveLeader') -> + {<<"Etcd.Maintenance">>, <<"MoveLeader">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'AuthEnable') -> + {<<"Etcd.Auth">>, <<"AuthEnable">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'AuthDisable') -> + {<<"Etcd.Auth">>, <<"AuthDisable">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'Authenticate') -> + {<<"Etcd.Auth">>, <<"Authenticate">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserAdd') -> + {<<"Etcd.Auth">>, <<"UserAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserGet') -> + {<<"Etcd.Auth">>, <<"UserGet">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserList') -> + {<<"Etcd.Auth">>, <<"UserList">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserDelete') -> + {<<"Etcd.Auth">>, <<"UserDelete">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserChangePassword') -> + {<<"Etcd.Auth">>, <<"UserChangePassword">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserGrantRole') -> + {<<"Etcd.Auth">>, <<"UserGrantRole">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserRevokeRole') -> + {<<"Etcd.Auth">>, <<"UserRevokeRole">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleAdd') -> + {<<"Etcd.Auth">>, <<"RoleAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleGet') -> + {<<"Etcd.Auth">>, <<"RoleGet">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleList') -> + {<<"Etcd.Auth">>, <<"RoleList">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleDelete') -> + {<<"Etcd.Auth">>, <<"RoleDelete">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleGrantPermission') -> + {<<"Etcd.Auth">>, <<"RoleGrantPermission">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleRevokePermission') -> + {<<"Etcd.Auth">>, <<"RoleRevokePermission">>}; +service_and_rpc_name_to_fqbins('Etcd.Health', + 'Check') -> + {<<"Etcd.Health">>, <<"Check">>}; +service_and_rpc_name_to_fqbins('Etcd.Health', + 'Watch') -> + {<<"Etcd.Health">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins('Etcd.Lock', 'Lock') -> + {<<"Etcd.Lock">>, <<"Lock">>}; +service_and_rpc_name_to_fqbins('Etcd.Lock', 'Unlock') -> + {<<"Etcd.Lock">>, <<"Unlock">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Campaign') -> + {<<"Etcd.Election">>, <<"Campaign">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Proclaim') -> + {<<"Etcd.Election">>, <<"Proclaim">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Leader') -> + {<<"Etcd.Election">>, <<"Leader">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Observe') -> + {<<"Etcd.Election">>, <<"Observe">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Resign') -> + {<<"Etcd.Election">>, <<"Resign">>}; +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"Etcd.ResponseHeader">>) -> 'Etcd.ResponseHeader'; +fqbin_to_msg_name(<<"Etcd.RangeRequest">>) -> 'Etcd.RangeRequest'; +fqbin_to_msg_name(<<"Etcd.RangeResponse">>) -> 'Etcd.RangeResponse'; +fqbin_to_msg_name(<<"Etcd.PutRequest">>) -> 'Etcd.PutRequest'; +fqbin_to_msg_name(<<"Etcd.PutResponse">>) -> 'Etcd.PutResponse'; +fqbin_to_msg_name(<<"Etcd.DeleteRangeRequest">>) -> 'Etcd.DeleteRangeRequest'; +fqbin_to_msg_name(<<"Etcd.DeleteRangeResponse">>) -> + 'Etcd.DeleteRangeResponse'; +fqbin_to_msg_name(<<"Etcd.RequestOp">>) -> 'Etcd.RequestOp'; +fqbin_to_msg_name(<<"Etcd.ResponseOp">>) -> 'Etcd.ResponseOp'; +fqbin_to_msg_name(<<"Etcd.Compare">>) -> 'Etcd.Compare'; +fqbin_to_msg_name(<<"Etcd.TxnRequest">>) -> 'Etcd.TxnRequest'; +fqbin_to_msg_name(<<"Etcd.TxnResponse">>) -> 'Etcd.TxnResponse'; +fqbin_to_msg_name(<<"Etcd.CompactionRequest">>) -> 'Etcd.CompactionRequest'; +fqbin_to_msg_name(<<"Etcd.CompactionResponse">>) -> 'Etcd.CompactionResponse'; +fqbin_to_msg_name(<<"Etcd.HashRequest">>) -> 'Etcd.HashRequest'; +fqbin_to_msg_name(<<"Etcd.HashKVRequest">>) -> 'Etcd.HashKVRequest'; +fqbin_to_msg_name(<<"Etcd.HashKVResponse">>) -> 'Etcd.HashKVResponse'; +fqbin_to_msg_name(<<"Etcd.HashResponse">>) -> 'Etcd.HashResponse'; +fqbin_to_msg_name(<<"Etcd.SnapshotRequest">>) -> 'Etcd.SnapshotRequest'; +fqbin_to_msg_name(<<"Etcd.SnapshotResponse">>) -> 'Etcd.SnapshotResponse'; +fqbin_to_msg_name(<<"Etcd.WatchRequest">>) -> 'Etcd.WatchRequest'; +fqbin_to_msg_name(<<"Etcd.WatchCreateRequest">>) -> 'Etcd.WatchCreateRequest'; +fqbin_to_msg_name(<<"Etcd.WatchCancelRequest">>) -> 'Etcd.WatchCancelRequest'; +fqbin_to_msg_name(<<"Etcd.WatchProgressRequest">>) -> + 'Etcd.WatchProgressRequest'; +fqbin_to_msg_name(<<"Etcd.WatchResponse">>) -> 'Etcd.WatchResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseGrantRequest">>) -> 'Etcd.LeaseGrantRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseGrantResponse">>) -> 'Etcd.LeaseGrantResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseRevokeRequest">>) -> 'Etcd.LeaseRevokeRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseRevokeResponse">>) -> + 'Etcd.LeaseRevokeResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpoint">>) -> 'Etcd.LeaseCheckpoint'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpointRequest">>) -> + 'Etcd.LeaseCheckpointRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpointResponse">>) -> + 'Etcd.LeaseCheckpointResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseKeepAliveRequest">>) -> + 'Etcd.LeaseKeepAliveRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseKeepAliveResponse">>) -> + 'Etcd.LeaseKeepAliveResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseTimeToLiveRequest">>) -> + 'Etcd.LeaseTimeToLiveRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseTimeToLiveResponse">>) -> + 'Etcd.LeaseTimeToLiveResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseLeasesRequest">>) -> 'Etcd.LeaseLeasesRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseStatus">>) -> 'Etcd.LeaseStatus'; +fqbin_to_msg_name(<<"Etcd.LeaseLeasesResponse">>) -> + 'Etcd.LeaseLeasesResponse'; +fqbin_to_msg_name(<<"Etcd.Member">>) -> 'Etcd.Member'; +fqbin_to_msg_name(<<"Etcd.MemberAddRequest">>) -> 'Etcd.MemberAddRequest'; +fqbin_to_msg_name(<<"Etcd.MemberAddResponse">>) -> 'Etcd.MemberAddResponse'; +fqbin_to_msg_name(<<"Etcd.MemberRemoveRequest">>) -> + 'Etcd.MemberRemoveRequest'; +fqbin_to_msg_name(<<"Etcd.MemberRemoveResponse">>) -> + 'Etcd.MemberRemoveResponse'; +fqbin_to_msg_name(<<"Etcd.MemberUpdateRequest">>) -> + 'Etcd.MemberUpdateRequest'; +fqbin_to_msg_name(<<"Etcd.MemberUpdateResponse">>) -> + 'Etcd.MemberUpdateResponse'; +fqbin_to_msg_name(<<"Etcd.MemberListRequest">>) -> 'Etcd.MemberListRequest'; +fqbin_to_msg_name(<<"Etcd.MemberListResponse">>) -> 'Etcd.MemberListResponse'; +fqbin_to_msg_name(<<"Etcd.MemberPromoteRequest">>) -> + 'Etcd.MemberPromoteRequest'; +fqbin_to_msg_name(<<"Etcd.MemberPromoteResponse">>) -> + 'Etcd.MemberPromoteResponse'; +fqbin_to_msg_name(<<"Etcd.DefragmentRequest">>) -> 'Etcd.DefragmentRequest'; +fqbin_to_msg_name(<<"Etcd.DefragmentResponse">>) -> 'Etcd.DefragmentResponse'; +fqbin_to_msg_name(<<"Etcd.MoveLeaderRequest">>) -> 'Etcd.MoveLeaderRequest'; +fqbin_to_msg_name(<<"Etcd.MoveLeaderResponse">>) -> 'Etcd.MoveLeaderResponse'; +fqbin_to_msg_name(<<"Etcd.AlarmRequest">>) -> 'Etcd.AlarmRequest'; +fqbin_to_msg_name(<<"Etcd.AlarmMember">>) -> 'Etcd.AlarmMember'; +fqbin_to_msg_name(<<"Etcd.AlarmResponse">>) -> 'Etcd.AlarmResponse'; +fqbin_to_msg_name(<<"Etcd.StatusRequest">>) -> 'Etcd.StatusRequest'; +fqbin_to_msg_name(<<"Etcd.StatusResponse">>) -> 'Etcd.StatusResponse'; +fqbin_to_msg_name(<<"Etcd.AuthEnableRequest">>) -> 'Etcd.AuthEnableRequest'; +fqbin_to_msg_name(<<"Etcd.AuthDisableRequest">>) -> 'Etcd.AuthDisableRequest'; +fqbin_to_msg_name(<<"Etcd.AuthenticateRequest">>) -> + 'Etcd.AuthenticateRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserAddRequest">>) -> 'Etcd.AuthUserAddRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserGetRequest">>) -> 'Etcd.AuthUserGetRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserDeleteRequest">>) -> + 'Etcd.AuthUserDeleteRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserChangePasswordRequest">>) -> + 'Etcd.AuthUserChangePasswordRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserGrantRoleRequest">>) -> + 'Etcd.AuthUserGrantRoleRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserRevokeRoleRequest">>) -> + 'Etcd.AuthUserRevokeRoleRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleAddRequest">>) -> 'Etcd.AuthRoleAddRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGetRequest">>) -> 'Etcd.AuthRoleGetRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserListRequest">>) -> + 'Etcd.AuthUserListRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleListRequest">>) -> + 'Etcd.AuthRoleListRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleDeleteRequest">>) -> + 'Etcd.AuthRoleDeleteRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGrantPermissionRequest">>) -> + 'Etcd.AuthRoleGrantPermissionRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleRevokePermissionRequest">>) -> + 'Etcd.AuthRoleRevokePermissionRequest'; +fqbin_to_msg_name(<<"Etcd.AuthEnableResponse">>) -> 'Etcd.AuthEnableResponse'; +fqbin_to_msg_name(<<"Etcd.AuthDisableResponse">>) -> + 'Etcd.AuthDisableResponse'; +fqbin_to_msg_name(<<"Etcd.AuthenticateResponse">>) -> + 'Etcd.AuthenticateResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserAddResponse">>) -> + 'Etcd.AuthUserAddResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserGetResponse">>) -> + 'Etcd.AuthUserGetResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserDeleteResponse">>) -> + 'Etcd.AuthUserDeleteResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserChangePasswordResponse">>) -> + 'Etcd.AuthUserChangePasswordResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserGrantRoleResponse">>) -> + 'Etcd.AuthUserGrantRoleResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserRevokeRoleResponse">>) -> + 'Etcd.AuthUserRevokeRoleResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleAddResponse">>) -> + 'Etcd.AuthRoleAddResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGetResponse">>) -> + 'Etcd.AuthRoleGetResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleListResponse">>) -> + 'Etcd.AuthRoleListResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserListResponse">>) -> + 'Etcd.AuthUserListResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleDeleteResponse">>) -> + 'Etcd.AuthRoleDeleteResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGrantPermissionResponse">>) -> + 'Etcd.AuthRoleGrantPermissionResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleRevokePermissionResponse">>) -> + 'Etcd.AuthRoleRevokePermissionResponse'; +fqbin_to_msg_name(<<"Etcd.HealthCheckRequest">>) -> 'Etcd.HealthCheckRequest'; +fqbin_to_msg_name(<<"Etcd.HealthCheckResponse">>) -> + 'Etcd.HealthCheckResponse'; +fqbin_to_msg_name(<<"Etcd.LockRequest">>) -> 'Etcd.LockRequest'; +fqbin_to_msg_name(<<"Etcd.LockResponse">>) -> 'Etcd.LockResponse'; +fqbin_to_msg_name(<<"Etcd.UnlockRequest">>) -> 'Etcd.UnlockRequest'; +fqbin_to_msg_name(<<"Etcd.UnlockResponse">>) -> 'Etcd.UnlockResponse'; +fqbin_to_msg_name(<<"Etcd.CampaignRequest">>) -> 'Etcd.CampaignRequest'; +fqbin_to_msg_name(<<"Etcd.CampaignResponse">>) -> 'Etcd.CampaignResponse'; +fqbin_to_msg_name(<<"Etcd.LeaderKey">>) -> 'Etcd.LeaderKey'; +fqbin_to_msg_name(<<"Etcd.LeaderRequest">>) -> 'Etcd.LeaderRequest'; +fqbin_to_msg_name(<<"Etcd.LeaderResponse">>) -> 'Etcd.LeaderResponse'; +fqbin_to_msg_name(<<"Etcd.ResignRequest">>) -> 'Etcd.ResignRequest'; +fqbin_to_msg_name(<<"Etcd.ResignResponse">>) -> 'Etcd.ResignResponse'; +fqbin_to_msg_name(<<"Etcd.ProclaimRequest">>) -> 'Etcd.ProclaimRequest'; +fqbin_to_msg_name(<<"Etcd.ProclaimResponse">>) -> 'Etcd.ProclaimResponse'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(<<"mvccpb.KeyValue">>) -> 'mvccpb.KeyValue'; +fqbin_to_msg_name(<<"mvccpb.Event">>) -> 'mvccpb.Event'; +fqbin_to_msg_name(<<"authpb.UserAddOptions">>) -> 'authpb.UserAddOptions'; +fqbin_to_msg_name(<<"authpb.User">>) -> 'authpb.User'; +fqbin_to_msg_name(<<"authpb.Permission">>) -> 'authpb.Permission'; +fqbin_to_msg_name(<<"authpb.Role">>) -> 'authpb.Role'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('Etcd.ResponseHeader') -> <<"Etcd.ResponseHeader">>; +msg_name_to_fqbin('Etcd.RangeRequest') -> <<"Etcd.RangeRequest">>; +msg_name_to_fqbin('Etcd.RangeResponse') -> <<"Etcd.RangeResponse">>; +msg_name_to_fqbin('Etcd.PutRequest') -> <<"Etcd.PutRequest">>; +msg_name_to_fqbin('Etcd.PutResponse') -> <<"Etcd.PutResponse">>; +msg_name_to_fqbin('Etcd.DeleteRangeRequest') -> <<"Etcd.DeleteRangeRequest">>; +msg_name_to_fqbin('Etcd.DeleteRangeResponse') -> + <<"Etcd.DeleteRangeResponse">>; +msg_name_to_fqbin('Etcd.RequestOp') -> <<"Etcd.RequestOp">>; +msg_name_to_fqbin('Etcd.ResponseOp') -> <<"Etcd.ResponseOp">>; +msg_name_to_fqbin('Etcd.Compare') -> <<"Etcd.Compare">>; +msg_name_to_fqbin('Etcd.TxnRequest') -> <<"Etcd.TxnRequest">>; +msg_name_to_fqbin('Etcd.TxnResponse') -> <<"Etcd.TxnResponse">>; +msg_name_to_fqbin('Etcd.CompactionRequest') -> <<"Etcd.CompactionRequest">>; +msg_name_to_fqbin('Etcd.CompactionResponse') -> <<"Etcd.CompactionResponse">>; +msg_name_to_fqbin('Etcd.HashRequest') -> <<"Etcd.HashRequest">>; +msg_name_to_fqbin('Etcd.HashKVRequest') -> <<"Etcd.HashKVRequest">>; +msg_name_to_fqbin('Etcd.HashKVResponse') -> <<"Etcd.HashKVResponse">>; +msg_name_to_fqbin('Etcd.HashResponse') -> <<"Etcd.HashResponse">>; +msg_name_to_fqbin('Etcd.SnapshotRequest') -> <<"Etcd.SnapshotRequest">>; +msg_name_to_fqbin('Etcd.SnapshotResponse') -> <<"Etcd.SnapshotResponse">>; +msg_name_to_fqbin('Etcd.WatchRequest') -> <<"Etcd.WatchRequest">>; +msg_name_to_fqbin('Etcd.WatchCreateRequest') -> <<"Etcd.WatchCreateRequest">>; +msg_name_to_fqbin('Etcd.WatchCancelRequest') -> <<"Etcd.WatchCancelRequest">>; +msg_name_to_fqbin('Etcd.WatchProgressRequest') -> + <<"Etcd.WatchProgressRequest">>; +msg_name_to_fqbin('Etcd.WatchResponse') -> <<"Etcd.WatchResponse">>; +msg_name_to_fqbin('Etcd.LeaseGrantRequest') -> <<"Etcd.LeaseGrantRequest">>; +msg_name_to_fqbin('Etcd.LeaseGrantResponse') -> <<"Etcd.LeaseGrantResponse">>; +msg_name_to_fqbin('Etcd.LeaseRevokeRequest') -> <<"Etcd.LeaseRevokeRequest">>; +msg_name_to_fqbin('Etcd.LeaseRevokeResponse') -> + <<"Etcd.LeaseRevokeResponse">>; +msg_name_to_fqbin('Etcd.LeaseCheckpoint') -> <<"Etcd.LeaseCheckpoint">>; +msg_name_to_fqbin('Etcd.LeaseCheckpointRequest') -> + <<"Etcd.LeaseCheckpointRequest">>; +msg_name_to_fqbin('Etcd.LeaseCheckpointResponse') -> + <<"Etcd.LeaseCheckpointResponse">>; +msg_name_to_fqbin('Etcd.LeaseKeepAliveRequest') -> + <<"Etcd.LeaseKeepAliveRequest">>; +msg_name_to_fqbin('Etcd.LeaseKeepAliveResponse') -> + <<"Etcd.LeaseKeepAliveResponse">>; +msg_name_to_fqbin('Etcd.LeaseTimeToLiveRequest') -> + <<"Etcd.LeaseTimeToLiveRequest">>; +msg_name_to_fqbin('Etcd.LeaseTimeToLiveResponse') -> + <<"Etcd.LeaseTimeToLiveResponse">>; +msg_name_to_fqbin('Etcd.LeaseLeasesRequest') -> <<"Etcd.LeaseLeasesRequest">>; +msg_name_to_fqbin('Etcd.LeaseStatus') -> <<"Etcd.LeaseStatus">>; +msg_name_to_fqbin('Etcd.LeaseLeasesResponse') -> + <<"Etcd.LeaseLeasesResponse">>; +msg_name_to_fqbin('Etcd.Member') -> <<"Etcd.Member">>; +msg_name_to_fqbin('Etcd.MemberAddRequest') -> <<"Etcd.MemberAddRequest">>; +msg_name_to_fqbin('Etcd.MemberAddResponse') -> <<"Etcd.MemberAddResponse">>; +msg_name_to_fqbin('Etcd.MemberRemoveRequest') -> + <<"Etcd.MemberRemoveRequest">>; +msg_name_to_fqbin('Etcd.MemberRemoveResponse') -> + <<"Etcd.MemberRemoveResponse">>; +msg_name_to_fqbin('Etcd.MemberUpdateRequest') -> + <<"Etcd.MemberUpdateRequest">>; +msg_name_to_fqbin('Etcd.MemberUpdateResponse') -> + <<"Etcd.MemberUpdateResponse">>; +msg_name_to_fqbin('Etcd.MemberListRequest') -> <<"Etcd.MemberListRequest">>; +msg_name_to_fqbin('Etcd.MemberListResponse') -> <<"Etcd.MemberListResponse">>; +msg_name_to_fqbin('Etcd.MemberPromoteRequest') -> + <<"Etcd.MemberPromoteRequest">>; +msg_name_to_fqbin('Etcd.MemberPromoteResponse') -> + <<"Etcd.MemberPromoteResponse">>; +msg_name_to_fqbin('Etcd.DefragmentRequest') -> <<"Etcd.DefragmentRequest">>; +msg_name_to_fqbin('Etcd.DefragmentResponse') -> <<"Etcd.DefragmentResponse">>; +msg_name_to_fqbin('Etcd.MoveLeaderRequest') -> <<"Etcd.MoveLeaderRequest">>; +msg_name_to_fqbin('Etcd.MoveLeaderResponse') -> <<"Etcd.MoveLeaderResponse">>; +msg_name_to_fqbin('Etcd.AlarmRequest') -> <<"Etcd.AlarmRequest">>; +msg_name_to_fqbin('Etcd.AlarmMember') -> <<"Etcd.AlarmMember">>; +msg_name_to_fqbin('Etcd.AlarmResponse') -> <<"Etcd.AlarmResponse">>; +msg_name_to_fqbin('Etcd.StatusRequest') -> <<"Etcd.StatusRequest">>; +msg_name_to_fqbin('Etcd.StatusResponse') -> <<"Etcd.StatusResponse">>; +msg_name_to_fqbin('Etcd.AuthEnableRequest') -> <<"Etcd.AuthEnableRequest">>; +msg_name_to_fqbin('Etcd.AuthDisableRequest') -> <<"Etcd.AuthDisableRequest">>; +msg_name_to_fqbin('Etcd.AuthenticateRequest') -> + <<"Etcd.AuthenticateRequest">>; +msg_name_to_fqbin('Etcd.AuthUserAddRequest') -> <<"Etcd.AuthUserAddRequest">>; +msg_name_to_fqbin('Etcd.AuthUserGetRequest') -> <<"Etcd.AuthUserGetRequest">>; +msg_name_to_fqbin('Etcd.AuthUserDeleteRequest') -> + <<"Etcd.AuthUserDeleteRequest">>; +msg_name_to_fqbin('Etcd.AuthUserChangePasswordRequest') -> + <<"Etcd.AuthUserChangePasswordRequest">>; +msg_name_to_fqbin('Etcd.AuthUserGrantRoleRequest') -> + <<"Etcd.AuthUserGrantRoleRequest">>; +msg_name_to_fqbin('Etcd.AuthUserRevokeRoleRequest') -> + <<"Etcd.AuthUserRevokeRoleRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleAddRequest') -> <<"Etcd.AuthRoleAddRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleGetRequest') -> <<"Etcd.AuthRoleGetRequest">>; +msg_name_to_fqbin('Etcd.AuthUserListRequest') -> + <<"Etcd.AuthUserListRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleListRequest') -> + <<"Etcd.AuthRoleListRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleDeleteRequest') -> + <<"Etcd.AuthRoleDeleteRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleGrantPermissionRequest') -> + <<"Etcd.AuthRoleGrantPermissionRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleRevokePermissionRequest') -> + <<"Etcd.AuthRoleRevokePermissionRequest">>; +msg_name_to_fqbin('Etcd.AuthEnableResponse') -> <<"Etcd.AuthEnableResponse">>; +msg_name_to_fqbin('Etcd.AuthDisableResponse') -> + <<"Etcd.AuthDisableResponse">>; +msg_name_to_fqbin('Etcd.AuthenticateResponse') -> + <<"Etcd.AuthenticateResponse">>; +msg_name_to_fqbin('Etcd.AuthUserAddResponse') -> + <<"Etcd.AuthUserAddResponse">>; +msg_name_to_fqbin('Etcd.AuthUserGetResponse') -> + <<"Etcd.AuthUserGetResponse">>; +msg_name_to_fqbin('Etcd.AuthUserDeleteResponse') -> + <<"Etcd.AuthUserDeleteResponse">>; +msg_name_to_fqbin('Etcd.AuthUserChangePasswordResponse') -> + <<"Etcd.AuthUserChangePasswordResponse">>; +msg_name_to_fqbin('Etcd.AuthUserGrantRoleResponse') -> + <<"Etcd.AuthUserGrantRoleResponse">>; +msg_name_to_fqbin('Etcd.AuthUserRevokeRoleResponse') -> + <<"Etcd.AuthUserRevokeRoleResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleAddResponse') -> + <<"Etcd.AuthRoleAddResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleGetResponse') -> + <<"Etcd.AuthRoleGetResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleListResponse') -> + <<"Etcd.AuthRoleListResponse">>; +msg_name_to_fqbin('Etcd.AuthUserListResponse') -> + <<"Etcd.AuthUserListResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleDeleteResponse') -> + <<"Etcd.AuthRoleDeleteResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleGrantPermissionResponse') -> + <<"Etcd.AuthRoleGrantPermissionResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleRevokePermissionResponse') -> + <<"Etcd.AuthRoleRevokePermissionResponse">>; +msg_name_to_fqbin('Etcd.HealthCheckRequest') -> <<"Etcd.HealthCheckRequest">>; +msg_name_to_fqbin('Etcd.HealthCheckResponse') -> + <<"Etcd.HealthCheckResponse">>; +msg_name_to_fqbin('Etcd.LockRequest') -> <<"Etcd.LockRequest">>; +msg_name_to_fqbin('Etcd.LockResponse') -> <<"Etcd.LockResponse">>; +msg_name_to_fqbin('Etcd.UnlockRequest') -> <<"Etcd.UnlockRequest">>; +msg_name_to_fqbin('Etcd.UnlockResponse') -> <<"Etcd.UnlockResponse">>; +msg_name_to_fqbin('Etcd.CampaignRequest') -> <<"Etcd.CampaignRequest">>; +msg_name_to_fqbin('Etcd.CampaignResponse') -> <<"Etcd.CampaignResponse">>; +msg_name_to_fqbin('Etcd.LeaderKey') -> <<"Etcd.LeaderKey">>; +msg_name_to_fqbin('Etcd.LeaderRequest') -> <<"Etcd.LeaderRequest">>; +msg_name_to_fqbin('Etcd.LeaderResponse') -> <<"Etcd.LeaderResponse">>; +msg_name_to_fqbin('Etcd.ResignRequest') -> <<"Etcd.ResignRequest">>; +msg_name_to_fqbin('Etcd.ResignResponse') -> <<"Etcd.ResignResponse">>; +msg_name_to_fqbin('Etcd.ProclaimRequest') -> <<"Etcd.ProclaimRequest">>; +msg_name_to_fqbin('Etcd.ProclaimResponse') -> <<"Etcd.ProclaimResponse">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin('mvccpb.KeyValue') -> <<"mvccpb.KeyValue">>; +msg_name_to_fqbin('mvccpb.Event') -> <<"mvccpb.Event">>; +msg_name_to_fqbin('authpb.UserAddOptions') -> <<"authpb.UserAddOptions">>; +msg_name_to_fqbin('authpb.User') -> <<"authpb.User">>; +msg_name_to_fqbin('authpb.Permission') -> <<"authpb.Permission">>; +msg_name_to_fqbin('authpb.Role') -> <<"authpb.Role">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"Etcd.RangeRequest.SortOrder">>) -> + 'Etcd.RangeRequest.SortOrder'; +fqbin_to_enum_name(<<"Etcd.RangeRequest.SortTarget">>) -> + 'Etcd.RangeRequest.SortTarget'; +fqbin_to_enum_name(<<"Etcd.Compare.CompareResult">>) -> + 'Etcd.Compare.CompareResult'; +fqbin_to_enum_name(<<"Etcd.Compare.CompareTarget">>) -> + 'Etcd.Compare.CompareTarget'; +fqbin_to_enum_name(<<"Etcd.WatchCreateRequest.FilterType">>) -> + 'Etcd.WatchCreateRequest.FilterType'; +fqbin_to_enum_name(<<"Etcd.AlarmType">>) -> 'Etcd.AlarmType'; +fqbin_to_enum_name(<<"Etcd.AlarmRequest.AlarmAction">>) -> + 'Etcd.AlarmRequest.AlarmAction'; +fqbin_to_enum_name(<<"Etcd.HealthCheckResponse.ServingStatus">>) -> + 'Etcd.HealthCheckResponse.ServingStatus'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(<<"mvccpb.Event.EventType">>) -> 'mvccpb.Event.EventType'; +fqbin_to_enum_name(<<"authpb.Permission.Type">>) -> 'authpb.Permission.Type'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('Etcd.RangeRequest.SortOrder') -> + <<"Etcd.RangeRequest.SortOrder">>; +enum_name_to_fqbin('Etcd.RangeRequest.SortTarget') -> + <<"Etcd.RangeRequest.SortTarget">>; +enum_name_to_fqbin('Etcd.Compare.CompareResult') -> + <<"Etcd.Compare.CompareResult">>; +enum_name_to_fqbin('Etcd.Compare.CompareTarget') -> + <<"Etcd.Compare.CompareTarget">>; +enum_name_to_fqbin('Etcd.WatchCreateRequest.FilterType') -> + <<"Etcd.WatchCreateRequest.FilterType">>; +enum_name_to_fqbin('Etcd.AlarmType') -> <<"Etcd.AlarmType">>; +enum_name_to_fqbin('Etcd.AlarmRequest.AlarmAction') -> + <<"Etcd.AlarmRequest.AlarmAction">>; +enum_name_to_fqbin('Etcd.HealthCheckResponse.ServingStatus') -> + <<"Etcd.HealthCheckResponse.ServingStatus">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin('mvccpb.Event.EventType') -> <<"mvccpb.Event.EventType">>; +enum_name_to_fqbin('authpb.Permission.Type') -> <<"authpb.Permission.Type">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> 'Etcd'. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "router.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["router.proto", "gogo.proto", "descriptor.proto", + "kv.proto", "auth.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> + ["router", "gogo", "descriptor", "kv", "auth"]. + + +get_msg_containment("router") -> + ['Etcd.AlarmMember', 'Etcd.AlarmRequest', + 'Etcd.AlarmResponse', 'Etcd.AuthDisableRequest', + 'Etcd.AuthDisableResponse', 'Etcd.AuthEnableRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthRoleAddRequest', + 'Etcd.AuthRoleAddResponse', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGetRequest', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleListRequest', 'Etcd.AuthRoleListResponse', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.AuthUserAddRequest', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserListRequest', 'Etcd.AuthUserListResponse', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthenticateRequest', 'Etcd.AuthenticateResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.CompactionRequest', 'Etcd.CompactionResponse', + 'Etcd.Compare', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.HashKVRequest', + 'Etcd.HashKVResponse', 'Etcd.HashRequest', + 'Etcd.HashResponse', 'Etcd.HealthCheckRequest', + 'Etcd.HealthCheckResponse', 'Etcd.LeaderKey', + 'Etcd.LeaderRequest', 'Etcd.LeaderResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseLeasesResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseStatus', 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', 'Etcd.LockRequest', + 'Etcd.LockResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MoveLeaderRequest', 'Etcd.MoveLeaderResponse', + 'Etcd.ProclaimRequest', 'Etcd.ProclaimResponse', + 'Etcd.PutRequest', 'Etcd.PutResponse', + 'Etcd.RangeRequest', 'Etcd.RangeResponse', + 'Etcd.RequestOp', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ResponseHeader', + 'Etcd.ResponseOp', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.StatusRequest', + 'Etcd.StatusResponse', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.UnlockRequest', + 'Etcd.UnlockResponse', 'Etcd.WatchCancelRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchProgressRequest', + 'Etcd.WatchRequest', 'Etcd.WatchResponse']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment("kv") -> + ['mvccpb.Event', 'mvccpb.KeyValue']; +get_msg_containment("auth") -> + ['authpb.Permission', 'authpb.Role', 'authpb.User', + 'authpb.UserAddOptions']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("router") -> 'Etcd'; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment("kv") -> mvccpb; +get_pkg_containment("auth") -> authpb; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("router") -> + ['Etcd.Auth', 'Etcd.Cluster', 'Etcd.Election', + 'Etcd.Health', 'Etcd.KV', 'Etcd.Lease', 'Etcd.Lock', + 'Etcd.Maintenance', 'Etcd.Watch']; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment("kv") -> []; +get_service_containment("auth") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("router") -> + [{'Etcd.KV', 'Range'}, {'Etcd.KV', 'Put'}, + {'Etcd.KV', 'DeleteRange'}, {'Etcd.KV', 'Txn'}, + {'Etcd.KV', 'Compact'}, {'Etcd.Watch', 'Watch'}, + {'Etcd.Lease', 'LeaseGrant'}, + {'Etcd.Lease', 'LeaseRevoke'}, + {'Etcd.Lease', 'LeaseKeepAlive'}, + {'Etcd.Lease', 'LeaseTimeToLive'}, + {'Etcd.Lease', 'LeaseLeases'}, + {'Etcd.Cluster', 'MemberAdd'}, + {'Etcd.Cluster', 'MemberRemove'}, + {'Etcd.Cluster', 'MemberUpdate'}, + {'Etcd.Cluster', 'MemberList'}, + {'Etcd.Cluster', 'MemberPromote'}, + {'Etcd.Maintenance', 'Alarm'}, + {'Etcd.Maintenance', 'Status'}, + {'Etcd.Maintenance', 'Defragment'}, + {'Etcd.Maintenance', 'Hash'}, + {'Etcd.Maintenance', 'HashKV'}, + {'Etcd.Maintenance', 'Snapshot'}, + {'Etcd.Maintenance', 'MoveLeader'}, + {'Etcd.Auth', 'AuthEnable'}, + {'Etcd.Auth', 'AuthDisable'}, + {'Etcd.Auth', 'Authenticate'}, {'Etcd.Auth', 'UserAdd'}, + {'Etcd.Auth', 'UserGet'}, {'Etcd.Auth', 'UserList'}, + {'Etcd.Auth', 'UserDelete'}, + {'Etcd.Auth', 'UserChangePassword'}, + {'Etcd.Auth', 'UserGrantRole'}, + {'Etcd.Auth', 'UserRevokeRole'}, + {'Etcd.Auth', 'RoleAdd'}, {'Etcd.Auth', 'RoleGet'}, + {'Etcd.Auth', 'RoleList'}, {'Etcd.Auth', 'RoleDelete'}, + {'Etcd.Auth', 'RoleGrantPermission'}, + {'Etcd.Auth', 'RoleRevokePermission'}, + {'Etcd.Health', 'Check'}, {'Etcd.Health', 'Watch'}, + {'Etcd.Lock', 'Lock'}, {'Etcd.Lock', 'Unlock'}, + {'Etcd.Election', 'Campaign'}, + {'Etcd.Election', 'Proclaim'}, + {'Etcd.Election', 'Leader'}, + {'Etcd.Election', 'Observe'}, + {'Etcd.Election', 'Resign'}]; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment("kv") -> []; +get_rpc_containment("auth") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("router") -> + ['Etcd.AlarmRequest.AlarmAction', 'Etcd.AlarmType', + 'Etcd.Compare.CompareResult', + 'Etcd.Compare.CompareTarget', + 'Etcd.HealthCheckResponse.ServingStatus', + 'Etcd.RangeRequest.SortOrder', + 'Etcd.RangeRequest.SortTarget', + 'Etcd.WatchCreateRequest.FilterType']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment("kv") -> + ['mvccpb.Event.EventType']; +get_enum_containment("auth") -> + ['authpb.Permission.Type']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"Etcd.RequestOp">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmMember">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.UserAddOptions">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseStatus">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchProgressRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchCancelRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.UnlockRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResignRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MoveLeaderRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberUpdateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberRemoveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberPromoteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseTimeToLiveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DefragmentRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CompactionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGetRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserDeleteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthDisableRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.KeyValue">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.TxnResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.RangeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.PutResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ProclaimResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MoveLeaderResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberUpdateResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberRemoveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberPromoteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LockResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseTimeToLiveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseRevokeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseLeasesResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DefragmentResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.Compare">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserRevokeRoleResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGetResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserDeleteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserChangePasswordResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleRevokePermissionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGrantPermissionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthEnableResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Permission">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResponseOp">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.User">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResponseHeader">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.Member">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.Event">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchCreateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.TxnRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.StatusRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.SnapshotRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.RangeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.PutRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ProclaimRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LockRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseRevokeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseLeasesRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseKeepAliveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseGrantRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpointRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpoint">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HealthCheckRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashKVRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DeleteRangeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CampaignRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthenticateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserRevokeRoleRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGrantRoleRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserChangePasswordRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleRevokePermissionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGrantPermissionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGetRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleDeleteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthEnableRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Role">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.UnlockResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.StatusResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.SnapshotResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResignResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseKeepAliveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseGrantResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpointResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HealthCheckResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashKVResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DeleteRangeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CompactionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CampaignResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthenticateResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGrantRoleResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGetResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleDeleteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthDisableResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderKey">>) -> "router"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +get_proto_by_service_name_as_fqbin(<<"Etcd.Cluster">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Maintenance">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Lease">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.KV">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Watch">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Health">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Auth">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Lock">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Election">>) -> "router"; +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"Etcd.RangeRequest.SortOrder">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.HealthCheckResponse.ServingStatus">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.RangeRequest.SortTarget">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.Compare.CompareTarget">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.Compare.CompareResult">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"authpb.Permission.Type">>) -> "auth"; +get_proto_by_enum_name_as_fqbin(<<"mvccpb.Event.EventType">>) -> "kv"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.WatchCreateRequest.FilterType">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.AlarmType">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.AlarmRequest.AlarmAction">>) -> "router"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"authpb">>) -> ["auth"]; +get_protos_by_pkg_name_as_fqbin(<<"mvccpb">>) -> ["kv"]; +get_protos_by_pkg_name_as_fqbin(<<"Etcd">>) -> ["router"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.1". + +gpb_version_as_list() -> + [4,11,1]. diff --git a/deps/getopt/LICENSE.txt b/deps/getopt/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..755f847694bab13a3ba6f411e022e1541d428e97 --- /dev/null +++ b/deps/getopt/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2009 Juan Jose Comellas +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + - Neither the name of Juan Jose Comellas nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/getopt/Makefile b/deps/getopt/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3845ac54a5abce5c19d28d0d50a0e1bb9f4182c5 --- /dev/null +++ b/deps/getopt/Makefile @@ -0,0 +1,22 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += -Dunicode_str=1 + + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/getopt/README.md b/deps/getopt/README.md new file mode 100644 index 0000000000000000000000000000000000000000..dd5f5b60f2a0006b57152f6c33e34ba644cc4bef --- /dev/null +++ b/deps/getopt/README.md @@ -0,0 +1,487 @@ +Getopt for Erlang +================= + +Command-line parsing module that uses a syntax similar to that of GNU *getopt*. + + +Requirements +------------ + +You should only need a somewhat recent version of Erlang/OTP. The module has +been tested with all versions of Erlang starting with R13B and ending with 20. + +You also need a recent version of [rebar3](http://www.rebar3.org/) in +the system path. + +Installation +------------ + +To compile the module you simply run `rebar3 compile`. + +To run the unit tests run `rebar3 eunit`. + +To build the (very) limited documentation run `rebar edoc`. + +To use getopt in your project you can just add it as a dependency in your +`rebar.config` file in the following way: +```sh +{deps, + [ + {getopt, "1.0.1"} + ] +} +``` + + +Usage +----- + +The `getopt` module provides four functions: + +```erlang +parse([{Name, Short, Long, ArgSpec, Help}], Args :: string() | [string()]) -> + {ok, {Options, NonOptionArgs}} | {error, {Reason, Data}} + +tokenize(CmdLine :: string()) -> [string()] + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string()) -> ok + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string(), + CmdLineTail :: string()) -> ok + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string(), + CmdLineTail :: string(), OptionsTail :: [{string(), string}]) -> ok +``` + +The `parse/2` function receives a list of tuples with the command line option +specifications. The type specification for the tuple is: + +```erlang +-type arg_type() :: 'atom' | 'binary' | 'boolean' | 'float' | 'integer' | 'string'. + +-type arg_value() :: atom() | binary() | boolean() | float() | integer() | string(). + +-type arg_spec() :: arg_type() | {arg_type(), arg_value()} | undefined. + +-type option_spec() :: { + Name :: atom(), + Short :: char() | undefined, + Long :: string() | undefined, + ArgSpec :: arg_spec(), + Help :: string() | undefined + }. +``` + +The elements of the tuple are: + + - `Name`: name of the option. + - `Short`: character for the short option (e.g. $i for -i). + - `Long`: string for the long option (e.g. "info" for --info). + - `ArgSpec`: data type and optional default value the argument will be converted to. + - `Help`: help message that is shown for the option when `usage/2` is called. + +e.g. + +```erlang +{port, $p, "port", {integer, 5432}, "Database server port"} +``` + +The second parameter receives the list of arguments as passed to the `main/1` +function in escripts or the unparsed command line as a string. + +If the function is successful parsing the command line arguments it will return +a tuple containing the parsed options and the non-option arguments. The options +will be represented by a list of key-value pairs with the `Name` of the +option as *key* and the argument from the command line as *value*. If the option +doesn't have an argument, only the atom corresponding to its `Name` will be +added to the list of options. For the example given above we could get something +like `{port, 5432}`. The non-option arguments are just a list of strings with +all the arguments that did not have corresponding options. + +e.g. Given the following option specifications: + +```erlang +OptSpecList = + [ + {host, $h, "host", {string, "localhost"}, "Database server host"}, + {port, $p, "port", integer, "Database server port"}, + {dbname, undefined, "dbname", {string, "users"}, "Database name"}, + {xml, $x, undefined, undefined, "Output data in XML"}, + {verbose, $v, "verbose", integer, "Verbosity level"}, + {file, undefined, undefined, string, "Output file"} + ]. +``` + +And this command line: + +```erlang +Args = "-h myhost --port=1000 -x myfile.txt -vvv dummy1 dummy2" +``` + +Which could also be passed in the format the `main/1` function receives the arguments in escripts: + +```erlang +Args = ["-h", "myhost", "--port=1000", "-x", "file.txt", "-vvv", "dummy1", "dummy2"]. +``` + +The call to `getopt:parse/2`: + +```erlang +getopt:parse(OptSpecList, Args). +``` + +Will return: + +```erlang +{ok,{[{host,"myhost"}, + {port,1000}, + xml, + {file,"file.txt"}, + {dbname,"users"}, + {verbose,3}], + ["dummy1","dummy2"]}} +``` + +The `tokenize/1` function will separate a command line string into +tokens, taking into account whether an argument is single or double +quoted, a character is escaped or if there are environment variables to +be expanded. e.g.: + +```erlang +getopt:tokenize(" --name John\\ Smith --path \"John's Files\" -u ${USER}"). +``` + +Will return something like: + +```erlang +["--name","John Smith","--path","John's Files","-u","jsmith"] +``` + +The other functions exported by the `getopt` module (`usage/2`, `usage/3` +and `usage/4`) are used to show the command line syntax for the program. +For example, given the above-mentioned option specifications, the call to +`getopt:usage/2`: + +```erlang +getopt:usage(OptSpecList, "ex1"). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v Verbosity level + Output file + +This call to `getopt:usage/3` will add a string after the usage command line: + +```erlang +getopt:usage(OptSpecList, "ex1", "[var=value ...] [command ...]"). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v ] [var=value ...] [command ...] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v, --verbose Verbosity level + Output file + +Whereas this call to `getopt:usage/3` will also add some lines to the options +help text: + +```erlang +getopt:usage(OptSpecList, "ex1", "[var=value ...] [command ...]", + [{"var=value", "Variables that will affect the execution (e.g. debug=1)"}, + {"command", "Commands that will be executed (e.g. count)"}]). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v ] [var=value ...] [command ...] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v, --verbose Verbosity level + Output file + var=value Variables that will affect the execution (e.g. debug=1) + command Commands that will be executed (e.g. count) + + +Command-line Syntax +------------------- + +The syntax supported by the `getopt` module is very similar to that followed +by GNU programs, which is described [here](http://www.gnu.org/s/libc/manual/html_node/Argument-Syntax.html). + +Options can have both short (single character) and long (string) option names. + +A short option can have the following syntax: + + -a Single option 'a', no argument or implicit boolean argument + -a foo Single option 'a', argument "foo" + -afoo Single option 'a', argument "foo" + -abc Multiple options: 'a'; 'b'; 'c' + -bcafoo Multiple options: 'b'; 'c'; 'a' with argument "foo" + -aaa Multiple repetitions of option 'a' + +A long option can have the following syntax: + + --foo Single option 'foo', no argument + --foo=bar Single option 'foo', argument "bar" + --foo bar Single option 'foo', argument "bar" + + +Argument Types +-------------- + +The arguments allowed for options are: *atom*; *binary*; *boolean*; *float*; *integer*; *string*. +The `getopt` module checks every argument to see if it can be converted to its +correct type. + +In the case of boolean arguments, the following values (in lower or +upper case) are considered `true`: *true*; *t*; *yes*; *y*; *on*; *enabled*; *1*. +These ones are considered `false`: *false*; *f*; *no*; *n*; *off*; *disabled*; *0*. + +Numeric arguments can only be negative when passed as part of an assignment expression. + +e.g. `--increment=-100` is a valid expression; whereas `--increment -100` is invalid + + +Implicit Arguments +------------------ + +The arguments for options with the *boolean* and *integer* data types can sometimes +be omitted. In those cases the value assigned to the option is *true* for *boolean* +arguments and *1* for integer arguments. + + +Multiple Repetitions +-------------------- + +An option can be repeated several times, in which case there will be multiple +appearances of the option in the resulting list. The only exceptions are short +options with integer arguments. In that particular case, each appearance of +the short option within a single command line argument will increment the +number that will be returned for that specific option. + +e.g. Given an option specification list with the following format: + +```erlang +OptSpecList = + [ + {define, $D, "define", string, "Define a variable"}, + {verbose, $v, "verbose", integer, "Verbosity level"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, "-DFOO -DVAR1=VAL1 -DBAR --verbose --verbose=3 -v -vvvv dummy"). +``` + +would return: + +```erlang +{ok,{[{define,"FOO"}, {define,"VAR1=VAL1"}, {define,"BAR"}, + {verbose,1}, {verbose,3}, {verbose,1}, {verbose,4}], + ["dummy"]}} +``` + + +Positional Options +------------------ + +We can also have options with neither short nor long option names. In this case, +the options will be taken according to their position in the option specification +list passed to `getopt:/parse2`. + +For example, with the following option specifications: + +```erlang +OptSpecList = + [ + {xml, $x, "xml", undefined, "Output data as XML"}, + {dbname, undefined, undefined, string, "Database name"}, + {output_file, undefined, undefined, string, "File where the data will be saved to"} + ]. +``` + +This call to `getopt:parse/2`: + +```erlang +getopt:parse(OptSpecList, "-x mydb file.out dummy dummy"). +``` + +Will return: + +```erlang +{ok,{[xml,{dbname,"mydb"},{output_file,"file.out"}], + ["dummy","dummy"]}} +``` + + +Option Terminators +------------------ + +The string `--` is considered an option terminator. This means that all the +command-line arguments after it are considered non-option arguments and will be +returned without being evaluated even if they follow the *getopt* syntax. + +e.g. This invocation using the first option specification list in the document: + +```erlang +getopt:parse(OptSpecList, "-h myhost -p 1000 -- --dbname mydb dummy"). +``` + +will return: + +```erlang +{ok,{[{host,"myhost"}, {port,1000},{dbname,"users"}], + ["--dbname","mydb","dummy"]}} +``` + +Notice that the *dbname* option was assigned the value `users` instead of `mydb`. +This happens because the option terminator prevented *getopt* from evaluating it +and the default value was assigned to it. + + +Non-option Arguments +-------------------- + +The single `-` character is always considered as a non-option argument. + +e.g. This invocation using the specification list from the previous example: + +```erlang +getopt:parse(OptSpecList, "-h myhost -p 1000 - --dbname mydb dummy"). +``` + +will return: + +```erlang +{ok,{[{host,"myhost"}, {port,1000}, {dbname,"mydb"}], + ["-","dummy"]}} +``` + + +Arguments with embedded whitespace +---------------------------------- + +Arguments that have embedded whitespace have to be quoted with either +single or double quotes to be considered as a single +argument. + + +e.g. Given an option specification list with the following format: + +```erlang +OptSpecList = + [ + {define, $D, "define", string, "Define a variable"}, + {user, $u, "user", string, "User name"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, + "-D'FOO=VAR 123' --define \"VAR WITH SPACES\" -u\"my user name\""). +``` + +would return: + +```erlang +{ok,{[{define,"FOO=VAR 123"}, + {define,"VAR WITH SPACES"}, + {user,"my user name"}], + []}} +``` + +When parsing a command line with unclosed quotes the last argument +will be a single string starting at the position where the last quote +was entered. + +e.g. The following invocation: + +```erlang +getopt:parse(OptSpecList, "--user ' my user ' \"argument with unclosed quotes"). +``` + +would return: + +```erlang +{ok,{[{user," my user "}], + ["argument with unclosed quotes"]}} +``` + + +Environment variable expansion +------------------------------ + +`getopt:parse/2` will expand environment variables when used with a command +line that is passed as a single string. The formats that are supported +for environment variable expansion are: + + - $VAR (simple Unix/bash format) + - ${VAR} (full Unix/bash format) + - %VAR% (Windows format) + +If a variable is not present in the environment it will not be +expanded. Variables can be expanded within double-quoted and free +arguments. *getopt* will not expand environment variables within +single-quoted arguments. + +e.g. Given the following option specification list: + +```erlang +OptSpecList = + [ + {path, $p, "path", string, "File path"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, "--path ${PATH} $NONEXISTENT_DUMMY_VAR"). +``` + +would return (depending on the value of your PATH variable) something like: + +```erlang +{ok,{[{path, "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}], + ["$NONEXISTENT_DUMMY_VAR"]}} +``` + +Currently, *getopt* does not perform wildcard expansion of file paths. + + +Escaping arguments +================== + +Any character can be escaped by prepending the \ (backslash) character +to it. + +e.g. + +```erlang +getopt:parse(OptSpecList, "--path /john\\'s\\ files dummy"). +``` + +Will return: + +```erlang +{ok,{[{path,"/john's files"}],["dummy"]}} +``` diff --git a/deps/getopt/rebar.config b/deps/getopt/rebar.config new file mode 100644 index 0000000000000000000000000000000000000000..6f412336dac0b2529019ec0d9ea7b6ef05b7bb24 --- /dev/null +++ b/deps/getopt/rebar.config @@ -0,0 +1,30 @@ +{erl_opts, [warn_unused_vars, + warn_export_all, + warn_shadow_vars, + warn_unused_import, + warn_unused_function, + warn_bif_clash, + warn_unused_record, + warn_deprecated_function, + warn_obsolete_guard, + strict_validation, + warn_export_vars, + warn_exported_vars, + warn_missing_spec, + warn_untyped_record, debug_info, + {platform_define, "^2", unicode_str} +]}. + +{dialyzer, + [ + {warnings, [no_return, no_undefined_callbacks, no_unused]}, + {get_warnings, true}, + {plt_apps, top_level_deps}, + {plt_location, local}, + {base_plt_apps, [kernel, stdlib, sasl, inets, crypto, public_key, ssl, + runtime_tools, erts, compiler, tools, syntax_tools, hipe, + mnesia]}, + {base_plt_location, global} + ]}. + +{xref_checks, [undefined_function_calls]}. diff --git a/deps/getopt/rebar.lock b/deps/getopt/rebar.lock new file mode 100644 index 0000000000000000000000000000000000000000..57afcca04590ff2bbf2f83b8eac4f856df782c74 --- /dev/null +++ b/deps/getopt/rebar.lock @@ -0,0 +1 @@ +[]. diff --git a/deps/getopt/src/getopt.app.src b/deps/getopt/src/getopt.app.src new file mode 100644 index 0000000000000000000000000000000000000000..ce7499a40b86c1785ce7299bb57bc6b4af2673ca --- /dev/null +++ b/deps/getopt/src/getopt.app.src @@ -0,0 +1,9 @@ +{application,getopt, + [{description,"Command-line options parser for Erlang"}, + {vsn,"1.0.1"}, + {modules,[]}, + {registered,[]}, + {maintainers,["Juan Jose Comellas"]}, + {licenses,["BSD"]}, + {links,[{"GitHub","https://github.com/jcomellas/getopt"}]}, + {applications,[kernel,stdlib]}]}. diff --git a/deps/getopt/src/getopt.erl b/deps/getopt/src/getopt.erl new file mode 100644 index 0000000000000000000000000000000000000000..b5ee7b4a07759160cacb207ff2536d1986613e63 --- /dev/null +++ b/deps/getopt/src/getopt.erl @@ -0,0 +1,947 @@ +%%%------------------------------------------------------------------- +%%% @author Juan Jose Comellas +%%% @copyright (C) 2009-2017 Juan Jose Comellas +%%% @doc Parses command line options with a format similar to that of GNU getopt. +%%% @end +%%% +%%% This source file is subject to the New BSD License. You should have received +%%% a copy of the New BSD license with this software. If not, it can be +%%% retrieved from: http://www.opensource.org/licenses/bsd-license.php +%%%------------------------------------------------------------------- +-module(getopt). +-author('juanjo@comellas.org'). + +-export([parse/2, check/2, parse_and_check/2, format_error/2, + usage/2, usage/3, usage/4, usage/6, tokenize/1]). +-export([usage_cmd_line/2]). + +-define(LINE_LENGTH, 75). +-define(MIN_USAGE_COMMAND_LINE_OPTION_LENGTH, 25). + +%% Position of each field in the option specification tuple. +-define(OPT_NAME, 1). +-define(OPT_SHORT, 2). +-define(OPT_LONG, 3). +-define(OPT_ARG, 4). +-define(OPT_HELP, 5). + +-define(IS_OPT_SPEC(Opt), (tuple_size(Opt) =:= ?OPT_HELP)). +-define(IS_WHITESPACE(Char), ((Char) =:= $\s orelse (Char) =:= $\t orelse + (Char) =:= $\n orelse (Char) =:= $\r)). + +%% Atom indicating the data type that an argument can be converted to. +-type arg_type() :: 'atom' | 'binary' | 'boolean' | 'float' | 'integer' | 'string'. +%% Data type that an argument can be converted to. +-type arg_value() :: atom() | binary() | boolean() | float() | integer() | string(). +%% Argument specification. +-type arg_spec() :: arg_type() | {arg_type(), arg_value()} | undefined. +%% Option type and optional default argument. +-type simple_option() :: atom(). +-type compound_option() :: {atom(), arg_value()}. +-type option() :: simple_option() | compound_option(). +%% Command line option specification. +-type option_spec() :: { + Name :: atom(), + Short :: char() | undefined, + Long :: string() | undefined, + ArgSpec :: arg_spec(), + Help :: string() | undefined + }. +%% Output streams +-type output_stream() :: 'standard_io' | 'standard_error'. + +%% For internal use +-type usage_line() :: {OptionText :: string(), HelpText :: string()}. +-type usage_line_with_length() :: {OptionLength :: non_neg_integer(), OptionText :: string(), HelpText :: string()}. + + +-export_type([arg_type/0, arg_value/0, arg_spec/0, simple_option/0, compound_option/0, option/0, option_spec/0]). + + +%% @doc Parse the command line options and arguments returning a list of tuples +%% and/or atoms using the Erlang convention for sending options to a +%% function. Additionally perform check if all required options (the ones +%% without default values) are present. The function is a combination of +%% two calls: parse/2 and check/2. +-spec parse_and_check([option_spec()], string() | [string()]) -> + {ok, {[option()], [string()]}} | {error, {Reason :: atom(), Data :: term()}}. +parse_and_check(OptSpecList, CmdLine) when is_list(OptSpecList), is_list(CmdLine) -> + case parse(OptSpecList, CmdLine) of + {ok, {Opts, _}} = Result -> + case check(OptSpecList, Opts) of + ok -> Result; + Error -> Error + end; + Error -> + Error + end. + +%% @doc Check the parsed command line arguments returning ok if all required +%% options (i.e. that don't have defaults) are present, and returning +%% error otherwise. +-spec check([option_spec()], [option()]) -> + ok | {error, {Reason :: atom(), Option :: atom()}}. +check(OptSpecList, ParsedOpts) when is_list(OptSpecList), is_list(ParsedOpts) -> + try + RequiredOpts = [Name || {Name, _, _, Arg, _} <- OptSpecList, + not is_tuple(Arg) andalso Arg =/= undefined], + lists:foreach(fun (Option) -> + case proplists:is_defined(Option, ParsedOpts) of + true -> + ok; + false -> + throw({error, {missing_required_option, Option}}) + end + end, RequiredOpts) + catch + _:Error -> + Error + end. + + +%% @doc Parse the command line options and arguments returning a list of tuples +%% and/or atoms using the Erlang convention for sending options to a +%% function. +-spec parse([option_spec()], string() | [string()]) -> + {ok, {[option()], [string()]}} | {error, {Reason :: atom(), Data :: term()}}. +parse(OptSpecList, CmdLine) when is_list(CmdLine) -> + try + Args = if + is_integer(hd(CmdLine)) -> tokenize(CmdLine); + true -> CmdLine + end, + parse(OptSpecList, [], [], 0, Args) + catch + throw: {error, {_Reason, _Data}} = Error -> + Error + end. + + +-spec parse([option_spec()], [option()], [string()], integer(), [string()]) -> + {ok, {[option()], [string()]}}. +%% Process the option terminator. +parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, ["--" | Tail]) -> + %% Any argument present after the terminator is not considered an option. + {ok, {lists:reverse(append_default_options(OptSpecList, OptAcc)), lists:reverse(ArgAcc, Tail)}}; +%% Process long options. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, ["--" ++ OptArg = OptStr | Tail]) -> + parse_long_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Tail, OptStr, OptArg); +%% Process short options. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, ["-" ++ ([_Char | _] = OptArg) = OptStr | Tail]) -> + parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Tail, OptStr, OptArg); +%% Process non-option arguments. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, [Arg | Tail]) -> + case find_non_option_arg(OptSpecList, ArgPos) of + {value, OptSpec} when ?IS_OPT_SPEC(OptSpec) -> + parse(OptSpecList, add_option_with_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos + 1, Tail); + false -> + parse(OptSpecList, OptAcc, [Arg | ArgAcc], ArgPos, Tail) + end; +parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, []) -> + %% Once we have completed gathering the options we add the ones that were + %% not present but had default arguments in the specification. + {ok, {lists:reverse(append_default_options(OptSpecList, OptAcc)), lists:reverse(ArgAcc)}}. + + +%% @doc Format the error code returned by prior call to parse/2 or check/2. +-spec format_error([option_spec()], {error, {Reason :: atom(), Data :: term()}} | + {Reason :: term(), Data :: term()}) -> string(). +format_error(OptSpecList, {error, Reason}) -> + format_error(OptSpecList, Reason); +format_error(OptSpecList, {missing_required_option, Name}) -> + OptStr = case lists:keyfind(Name, 1, OptSpecList) of + {Name, undefined, undefined, _Type, _Help} -> ["<", to_string(Name), ">"]; + {_Name, undefined, Long, _Type, _Help} -> ["--", Long]; + {_Name, Short, undefined, _Type, _Help} -> ["-", Short]; + {_Name, Short, Long, _Type, _Help} -> ["-", Short, " (", Long, ")"] + end, + lists:flatten(["missing required option: ", OptStr]); +format_error(_OptSpecList, {invalid_option, OptStr}) -> + lists:flatten(["invalid option: ", to_string(OptStr)]); +format_error(_OptSpecList, {invalid_option_arg, {Name, Arg}}) -> + lists:flatten(["option \'", to_string(Name) ++ "\' has invalid argument: ", to_string(Arg)]); +format_error(_OptSpecList, {invalid_option_arg, OptStr}) -> + lists:flatten(["invalid option argument: ", to_string(OptStr)]); +format_error(_OptSpecList, {Reason, Data}) -> + lists:flatten([to_string(Reason), " ", to_string(Data)]). + + +%% @doc Parse a long option, add it to the option accumulator and continue +%% parsing the rest of the arguments recursively. +%% A long option can have the following syntax: +%% --foo Single option 'foo', no argument +%% --foo=bar Single option 'foo', argument "bar" +%% --foo bar Single option 'foo', argument "bar" +-spec parse_long_option([option_spec()], [option()], [string()], integer(), [string()], string(), string()) -> + {ok, {[option()], [string()]}}. +parse_long_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptArg) -> + case split_assigned_arg(OptArg) of + {Long, Arg} -> + %% Get option that has its argument within the same string + %% separated by an equal ('=') character (e.g. "--port=1000"). + parse_long_option_assigned_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, Long, Arg); + + Long -> + case lists:keyfind(Long, ?OPT_LONG, OptSpecList) of + {Name, _Short, Long, undefined, _Help} -> + parse(OptSpecList, [Name | OptAcc], ArgAcc, ArgPos, Args); + + {_Name, _Short, Long, _ArgSpec, _Help} = OptSpec -> + %% The option argument string is empty, but the option requires + %% an argument, so we look into the next string in the list. + %% e.g ["--port", "1000"] + parse_long_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptSpec); + false -> + throw({error, {invalid_option, OptStr}}) + end + end. + + +%% @doc Parse an option where the argument is 'assigned' in the same string using +%% the '=' character, add it to the option accumulator and continue parsing the +%% rest of the arguments recursively. This syntax is only valid for long options. +-spec parse_long_option_assigned_arg([option_spec()], [option()], [string()], integer(), + [string()], string(), string(), string()) -> + {ok, {[option()], [string()]}}. +parse_long_option_assigned_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, Long, Arg) -> + case lists:keyfind(Long, ?OPT_LONG, OptSpecList) of + {_Name, _Short, Long, ArgSpec, _Help} = OptSpec -> + case ArgSpec of + undefined -> + throw({error, {invalid_option_arg, OptStr}}); + _ -> + parse(OptSpecList, add_option_with_assigned_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos, Args) + end; + false -> + throw({error, {invalid_option, OptStr}}) + end. + + +%% @doc Split an option string that may contain an option with its argument +%% separated by an equal ('=') character (e.g. "port=1000"). +-spec split_assigned_arg(string()) -> {Name :: string(), Arg :: string()} | string(). +split_assigned_arg(OptStr) -> + split_assigned_arg(OptStr, OptStr, []). + +split_assigned_arg(_OptStr, "=" ++ Tail, Acc) -> + {lists:reverse(Acc), Tail}; +split_assigned_arg(OptStr, [Char | Tail], Acc) -> + split_assigned_arg(OptStr, Tail, [Char | Acc]); +split_assigned_arg(OptStr, [], _Acc) -> + OptStr. + + +%% @doc Retrieve the argument for an option from the next string in the list of +%% command-line parameters or set the value of the argument from the argument +%% specification (for boolean and integer arguments), if possible. +parse_long_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, {Name, _Short, _Long, ArgSpec, _Help} = OptSpec) -> + ArgSpecType = arg_spec_type(ArgSpec), + case Args =:= [] orelse is_implicit_arg(ArgSpecType, hd(Args)) of + true -> + parse(OptSpecList, add_option_with_implicit_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + false -> + [Arg | Tail] = Args, + try + parse(OptSpecList, [{Name, to_type(ArgSpecType, Arg)} | OptAcc], ArgAcc, ArgPos, Tail) + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end + end. + + +%% @doc Parse a short option, add it to the option accumulator and continue +%% parsing the rest of the arguments recursively. +%% A short option can have the following syntax: +%% -a Single option 'a', no argument or implicit boolean argument +%% -a foo Single option 'a', argument "foo" +%% -afoo Single option 'a', argument "foo" +%% -abc Multiple options: 'a'; 'b'; 'c' +%% -bcafoo Multiple options: 'b'; 'c'; 'a' with argument "foo" +%% -aaa Multiple repetitions of option 'a' (only valid for options with integer arguments) +-spec parse_short_option([option_spec()], [option()], [string()], integer(), [string()], string(), string()) -> + {ok, {[option()], [string()]}}. +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptArg) -> + parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, first, OptArg). + +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptPos, [Short | Arg]) -> + case lists:keyfind(Short, ?OPT_SHORT, OptSpecList) of + {Name, Short, _Long, undefined, _Help} -> + parse_short_option(OptSpecList, [Name | OptAcc], ArgAcc, ArgPos, Args, OptStr, first, Arg); + + {_Name, Short, _Long, ArgSpec, _Help} = OptSpec -> + %% The option has a specification, so it requires an argument. + case Arg of + [] -> + %% The option argument string is empty, but the option requires + %% an argument, so we look into the next string in the list. + parse_short_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptSpec, OptPos); + + _ -> + case is_valid_arg(ArgSpec, Arg) of + true -> + parse(OptSpecList, add_option_with_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos, Args); + _ -> + NewOptAcc = case OptPos of + first -> add_option_with_implicit_arg(OptSpec, OptAcc); + _ -> add_option_with_implicit_incrementable_arg(OptSpec, OptAcc) + end, + parse_short_option(OptSpecList, NewOptAcc, ArgAcc, ArgPos, Args, OptStr, next, Arg) + end + end; + + false -> + throw({error, {invalid_option, OptStr}}) + end; +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, _OptStr, _OptPos, []) -> + parse(OptSpecList, OptAcc, ArgAcc, ArgPos, Args). + + +%% @doc Retrieve the argument for an option from the next string in the list of +%% command-line parameters or set the value of the argument from the argument +%% specification (for boolean and integer arguments), if possible. +parse_short_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, {Name, _Short, _Long, ArgSpec, _Help} = OptSpec, OptPos) -> + case Args =:= [] orelse is_implicit_arg(ArgSpec, hd(Args)) of + true when OptPos =:= first -> + parse(OptSpecList, add_option_with_implicit_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + true -> + parse(OptSpecList, add_option_with_implicit_incrementable_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + false -> + [Arg | Tail] = Args, + try + parse(OptSpecList, [{Name, to_type(ArgSpec, Arg)} | OptAcc], ArgAcc, ArgPos, Tail) + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end + end. + + +%% @doc Find the option for the discrete argument in position specified in the +%% Pos argument. +-spec find_non_option_arg([option_spec()], integer()) -> {value, option_spec()} | false. +find_non_option_arg([{_Name, undefined, undefined, _ArgSpec, _Help} = OptSpec | _Tail], 0) -> + {value, OptSpec}; +find_non_option_arg([{_Name, undefined, undefined, _ArgSpec, _Help} | Tail], Pos) -> + find_non_option_arg(Tail, Pos - 1); +find_non_option_arg([_Head | Tail], Pos) -> + find_non_option_arg(Tail, Pos); +find_non_option_arg([], _Pos) -> + false. + + +%% @doc Append options that were not present in the command line arguments with +%% their default arguments. +-spec append_default_options([option_spec()], [option()]) -> [option()]. +append_default_options([{Name, _Short, _Long, {_Type, DefaultArg}, _Help} | Tail], OptAcc) -> + append_default_options(Tail, + case lists:keymember(Name, 1, OptAcc) of + false -> + [{Name, DefaultArg} | OptAcc]; + _ -> + OptAcc + end); +%% For options with no default argument. +append_default_options([_Head | Tail], OptAcc) -> + append_default_options(Tail, OptAcc); +append_default_options([], OptAcc) -> + OptAcc. + + +%% @doc Add an option with argument converting it to the data type indicated by the +%% argument specification. +-spec add_option_with_arg(option_spec(), string(), [option()]) -> [option()]. +add_option_with_arg({Name, _Short, _Long, ArgSpec, _Help} = OptSpec, Arg, OptAcc) -> + case is_valid_arg(ArgSpec, Arg) of + true -> + try + [{Name, to_type(ArgSpec, Arg)} | OptAcc] + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end; + false -> + add_option_with_implicit_arg(OptSpec, OptAcc) + end. + + +%% @doc Add an option with argument that was part of an assignment expression +%% (e.g. "--verbose=3") converting it to the data type indicated by the +%% argument specification. +-spec add_option_with_assigned_arg(option_spec(), string(), [option()]) -> [option()]. +add_option_with_assigned_arg({Name, _Short, _Long, ArgSpec, _Help}, Arg, OptAcc) -> + try + [{Name, to_type(ArgSpec, Arg)} | OptAcc] + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end. + + +%% @doc Add an option that required an argument but did not have one. Some data +%% types (boolean, integer) allow implicit or assumed arguments. +-spec add_option_with_implicit_arg(option_spec(), [option()]) -> [option()]. +add_option_with_implicit_arg({Name, _Short, _Long, ArgSpec, _Help}, OptAcc) -> + case arg_spec_type(ArgSpec) of + boolean -> + %% Special case for boolean arguments: if there is no argument we + %% set the value to 'true'. + [{Name, true} | OptAcc]; + integer -> + %% Special case for integer arguments: if the option had not been set + %% before we set the value to 1. This is needed to support options like + %% "-v" to return something like {verbose, 1}. + [{Name, 1} | OptAcc]; + _ -> + throw({error, {missing_option_arg, Name}}) + end. + + +%% @doc Add an option with an implicit or assumed argument. +-spec add_option_with_implicit_incrementable_arg(option_spec() | arg_spec(), [option()]) -> [option()]. +add_option_with_implicit_incrementable_arg({Name, _Short, _Long, ArgSpec, _Help}, OptAcc) -> + case arg_spec_type(ArgSpec) of + boolean -> + %% Special case for boolean arguments: if there is no argument we + %% set the value to 'true'. + [{Name, true} | OptAcc]; + integer -> + %% Special case for integer arguments: if the option had not been set + %% before we set the value to 1; if not we increment the previous value + %% the option had. This is needed to support options like "-vvv" to + %% return something like {verbose, 3}. + case OptAcc of + [{Name, Count} | Tail] -> + [{Name, Count + 1} | Tail]; + _ -> + [{Name, 1} | OptAcc] + end; + _ -> + throw({error, {missing_option_arg, Name}}) + end. + + +%% @doc Retrieve the data type form an argument specification. +-spec arg_spec_type(arg_spec()) -> arg_type() | undefined. +arg_spec_type({Type, _DefaultArg}) -> + Type; +arg_spec_type(Type) when is_atom(Type) -> + Type. + + +%% @doc Convert an argument string to its corresponding data type. +-spec to_type(arg_spec() | arg_type(), string()) -> arg_value(). +to_type({Type, _DefaultArg}, Arg) -> + to_type(Type, Arg); +to_type(binary, Arg) -> + list_to_binary(Arg); +to_type(atom, Arg) -> + list_to_atom(Arg); +to_type(integer, Arg) -> + list_to_integer(Arg); +to_type(float, Arg) -> + list_to_float(Arg); +to_type(boolean, Arg) -> + LowerArg = lowercase(Arg), + case is_arg_true(LowerArg) of + true -> + true; + _ -> + case is_arg_false(LowerArg) of + true -> + false; + false -> + erlang:error(badarg) + end + end; +to_type(_Type, Arg) -> + Arg. + + +-spec is_arg_true(string()) -> boolean(). +is_arg_true(Arg) -> + (Arg =:= "true") orelse (Arg =:= "t") orelse + (Arg =:= "yes") orelse (Arg =:= "y") orelse + (Arg =:= "on") orelse (Arg =:= "enabled") orelse + (Arg =:= "1"). + + +-spec is_arg_false(string()) -> boolean(). +is_arg_false(Arg) -> + (Arg =:= "false") orelse (Arg =:= "f") orelse + (Arg =:= "no") orelse (Arg =:= "n") orelse + (Arg =:= "off") orelse (Arg =:= "disabled") orelse + (Arg =:= "0"). + + +-spec is_valid_arg(arg_spec(), nonempty_string()) -> boolean(). +is_valid_arg({Type, _DefaultArg}, Arg) -> + is_valid_arg(Type, Arg); +is_valid_arg(boolean, Arg) -> + is_boolean_arg(Arg); +is_valid_arg(integer, Arg) -> + is_non_neg_integer_arg(Arg); +is_valid_arg(float, Arg) -> + is_non_neg_float_arg(Arg); +is_valid_arg(_Type, _Arg) -> + true. + + +-spec is_implicit_arg(arg_spec(), nonempty_string()) -> boolean(). +is_implicit_arg({Type, _DefaultArg}, Arg) -> + is_implicit_arg(Type, Arg); +is_implicit_arg(boolean, Arg) -> + not is_boolean_arg(Arg); +is_implicit_arg(integer, Arg) -> + not is_integer_arg(Arg); +is_implicit_arg(_Type, _Arg) -> + false. + + +-spec is_boolean_arg(string()) -> boolean(). +is_boolean_arg(Arg) -> + LowerArg = lowercase(Arg), + is_arg_true(LowerArg) orelse is_arg_false(LowerArg). + + +-spec is_integer_arg(string()) -> boolean(). +is_integer_arg("-" ++ Tail) -> + is_non_neg_integer_arg(Tail); +is_integer_arg(Arg) -> + is_non_neg_integer_arg(Arg). + + +-spec is_non_neg_integer_arg(string()) -> boolean(). +is_non_neg_integer_arg([Head | Tail]) when Head >= $0, Head =< $9 -> + is_non_neg_integer_arg(Tail); +is_non_neg_integer_arg([_Head | _Tail]) -> + false; +is_non_neg_integer_arg([]) -> + true. + + +-spec is_non_neg_float_arg(string()) -> boolean(). +is_non_neg_float_arg([Head | Tail]) when (Head >= $0 andalso Head =< $9) orelse Head =:= $. -> + is_non_neg_float_arg(Tail); +is_non_neg_float_arg([_Head | _Tail]) -> + false; +is_non_neg_float_arg([]) -> + true. + + +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. +-spec usage([option_spec()], string()) -> ok. +usage(OptSpecList, ProgramName) -> + usage(OptSpecList, ProgramName, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. +-spec usage([option_spec()], string(), output_stream() | string()) -> ok. +usage(OptSpecList, ProgramName, OutputStream) when is_atom(OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList)), unicode:characters_to_list(usage_options(OptSpecList))]); +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail argument +%% is a string that is added to the end of the usage command line. +usage(OptSpecList, ProgramName, CmdLineTail) -> + usage(OptSpecList, ProgramName, CmdLineTail, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail argument +%% is a string that is added to the end of the usage command line. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), output_stream() | [{string(), string()}]) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, OutputStream) when is_atom(OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), unicode:characters_to_list(usage_options(OptSpecList))]); +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail and OptionsTail +%% arguments are a string that is added to the end of the usage command line +%% and a list of tuples that are added to the end of the options' help lines. +usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail) -> + usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail and OptionsTail +%% arguments are a string that is added to the end of the usage command line +%% and a list of tuples that are added to the end of the options' help lines. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), + [{OptionName :: string(), Help :: string()}], output_stream()) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail, OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), unicode:characters_to_list(usage_options(OptSpecList, OptionsTail))]). + +%% @doc Show a message on standard_error or standard_io indicating the +%% command line options and arguments that are supported by the +%% program. The Description allows for structured command line usage +%% that works in addition to the standard options, and appears between +%% the usage_cmd_line and usage_options sections. The CmdLineTail and +%% OptionsTail arguments are a string that is added to the end of the +%% usage command line and a list of tuples that are added to the end of +%% the options' help lines. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), + Description :: string(), + [{OptionName :: string(), Help :: string()}], + output_stream()) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, Description, OptionsTail, OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), Description, unicode:characters_to_list(usage_options(OptSpecList, OptionsTail))]). + + +-spec usage_cmd_line(ProgramName :: string(), [option_spec()]) -> iolist(). +usage_cmd_line(ProgramName, OptSpecList) -> + usage_cmd_line(ProgramName, OptSpecList, ""). + +-spec usage_cmd_line(ProgramName :: string(), [option_spec()], CmdLineTail :: string()) -> iolist(). +usage_cmd_line(ProgramName, OptSpecList, CmdLineTail) -> + Prefix = "Usage: " ++ ProgramName, + PrefixLength = length(Prefix), + LineLength = line_length(), + %% Only align the command line options after the program name when there is + %% enough room to do so (i.e. at least 25 characters). If not, show the + %% command line options below the program name with a 2-character indentation. + if + (LineLength - PrefixLength) > ?MIN_USAGE_COMMAND_LINE_OPTION_LENGTH -> + Indentation = lists:duplicate(PrefixLength, $\s), + [FirstOptLine | OptLines] = usage_cmd_line_options(LineLength - PrefixLength, OptSpecList, CmdLineTail), + IndentedOptLines = [[Indentation | OptLine] || OptLine <- OptLines], + [Prefix, FirstOptLine | IndentedOptLines]; + true -> + IndentedOptLines = [[" " | OptLine] || OptLine <- usage_cmd_line_options(LineLength, OptSpecList, CmdLineTail)], + [Prefix, $\n, IndentedOptLines] + end. + + +%% @doc Return a list of the lines corresponding to the usage command line +%% already wrapped according to the maximum MaxLineLength. +-spec usage_cmd_line_options(MaxLineLength :: non_neg_integer(), [option_spec()], CmdLineTail :: string()) -> iolist(). +usage_cmd_line_options(MaxLineLength, OptSpecList, CmdLineTail) -> + usage_cmd_line_options(MaxLineLength, OptSpecList ++ lexemes(CmdLineTail, " "), [], 0, []). + +usage_cmd_line_options(MaxLineLength, [OptSpec | Tail], LineAcc, LineAccLength, Acc) -> + Option = [$\s | lists:flatten(usage_cmd_line_option(OptSpec))], + OptionLength = length(Option), + %% We accumulate the options in LineAcc until its length is over the + %% maximum allowed line length. When that happens, we append the line in + %% LineAcc to the list with all the lines in the command line (Acc). + NewLineAccLength = LineAccLength + OptionLength, + if + NewLineAccLength < MaxLineLength -> + usage_cmd_line_options(MaxLineLength, Tail, [Option | LineAcc], NewLineAccLength, Acc); + true -> + usage_cmd_line_options(MaxLineLength, Tail, [Option], OptionLength + 1, + [lists:reverse([$\n | LineAcc]) | Acc]) + end; +usage_cmd_line_options(MaxLineLength, [], [_ | _] = LineAcc, _LineAccLength, Acc) -> + %% If there was a non-empty line in LineAcc when there are no more options + %% to process, we add it to the list of lines to return. + usage_cmd_line_options(MaxLineLength, [], [], 0, [lists:reverse(LineAcc) | Acc]); +usage_cmd_line_options(_MaxLineLength, [], [], _LineAccLength, Acc) -> + lists:reverse(Acc). + + +-spec usage_cmd_line_option(option_spec()) -> string(). +usage_cmd_line_option({_Name, Short, _Long, undefined, _Help}) when Short =/= undefined -> + %% For options with short form and no argument. + [$[, $-, Short, $]]; +usage_cmd_line_option({_Name, _Short, Long, undefined, _Help}) when Long =/= undefined -> + %% For options with only long form and no argument. + [$[, $-, $-, Long, $]]; +usage_cmd_line_option({_Name, _Short, _Long, undefined, _Help}) -> + []; +usage_cmd_line_option({Name, Short, Long, ArgSpec, _Help}) when is_atom(ArgSpec) -> + %% For options with no default argument. + if + %% For options with short form and argument. + Short =/= undefined -> [$[, $-, Short, $\s, $<, atom_to_list(Name), $>, $]]; + %% For options with only long form and argument. + Long =/= undefined -> [$[, $-, $-, Long, $\s, $<, atom_to_list(Name), $>, $]]; + %% For options with neither short nor long form and argument. + true -> [$[, $<, atom_to_list(Name), $>, $]] + end; +usage_cmd_line_option({Name, Short, Long, ArgSpec, _Help}) when is_tuple(ArgSpec) -> + %% For options with default argument. + if + %% For options with short form and default argument. + Short =/= undefined -> [$[, $-, Short, $\s, $[, $<, atom_to_list(Name), $>, $], $]]; + %% For options with only long form and default argument. + Long =/= undefined -> [$[, $-, $-, Long, $\s, $[, $<, atom_to_list(Name), $>, $], $]]; + %% For options with neither short nor long form and default argument. + true -> [$[, $<, atom_to_list(Name), $>, $]] + end; +usage_cmd_line_option(Option) when is_list(Option) -> + %% For custom options that are added to the command line. + Option. + + +%% @doc Return a list of help messages to print for each of the options and arguments. +-spec usage_options([option_spec()]) -> [string()]. +usage_options(OptSpecList) -> + usage_options(OptSpecList, []). + + +%% @doc Return a list of usage lines to print for each of the options and arguments. +-spec usage_options([option_spec()], [{OptionName :: string(), Help :: string()}]) -> [string()]. +usage_options(OptSpecList, CustomHelp) -> + %% Add the usage lines corresponding to the option specifications. + {MaxOptionLength0, UsageLines0} = add_option_spec_help_lines(OptSpecList, 0, []), + %% Add the custom usage lines. + {MaxOptionLength, UsageLines} = add_custom_help_lines(CustomHelp, MaxOptionLength0, UsageLines0), + MaxLineLength = line_length(), + lists:reverse([format_usage_line(MaxOptionLength + 1, MaxLineLength, UsageLine) || UsageLine <- UsageLines]). + + +-spec add_option_spec_help_lines([option_spec()], PrevMaxOptionLength :: non_neg_integer(), [usage_line_with_length()]) -> + {MaxOptionLength :: non_neg_integer(), [usage_line_with_length()]}. +add_option_spec_help_lines([OptSpec | Tail], PrevMaxOptionLength, Acc) -> + OptionText = usage_option_text(OptSpec), + HelpText = usage_help_text(OptSpec), + {MaxOptionLength, ColsWithLength} = get_max_option_length({OptionText, HelpText}, PrevMaxOptionLength), + add_option_spec_help_lines(Tail, MaxOptionLength, [ColsWithLength | Acc]); +add_option_spec_help_lines([], MaxOptionLength, Acc) -> + {MaxOptionLength, Acc}. + + +-spec add_custom_help_lines([usage_line()], PrevMaxOptionLength :: non_neg_integer(), [usage_line_with_length()]) -> + {MaxOptionLength :: non_neg_integer(), [usage_line_with_length()]}. +add_custom_help_lines([CustomCols | Tail], PrevMaxOptionLength, Acc) -> + {MaxOptionLength, ColsWithLength} = get_max_option_length(CustomCols, PrevMaxOptionLength), + add_custom_help_lines(Tail, MaxOptionLength, [ColsWithLength | Acc]); +add_custom_help_lines([], MaxOptionLength, Acc) -> + {MaxOptionLength, Acc}. + + +-spec usage_option_text(option_spec()) -> string(). +usage_option_text({Name, undefined, undefined, _ArgSpec, _Help}) -> + %% Neither short nor long form (non-option argument). + "<" ++ atom_to_list(Name) ++ ">"; +usage_option_text({_Name, Short, undefined, _ArgSpec, _Help}) -> + %% Only short form. + [$-, Short]; +usage_option_text({_Name, undefined, Long, _ArgSpec, _Help}) -> + %% Only long form. + [$-, $- | Long]; +usage_option_text({_Name, Short, Long, _ArgSpec, _Help}) -> + %% Both short and long form. + [$-, Short, $,, $\s, $-, $- | Long]. + + +-spec usage_help_text(option_spec()) -> string(). +usage_help_text({_Name, _Short, _Long, {_ArgType, ArgValue}, [_ | _] = Help}) -> + Help ++ " [default: " ++ default_arg_value_to_string(ArgValue) ++ "]"; +usage_help_text({_Name, _Short, _Long, _ArgSpec, Help}) -> + Help. + + +%% @doc Calculate the maximum width of the column that shows the option's short +%% and long form. +-spec get_max_option_length(usage_line(), PrevMaxOptionLength :: non_neg_integer()) -> + {MaxOptionLength :: non_neg_integer(), usage_line_with_length()}. +get_max_option_length({OptionText, HelpText}, PrevMaxOptionLength) -> + OptionLength = length(OptionText), + {erlang:max(OptionLength, PrevMaxOptionLength), {OptionLength, OptionText, HelpText}}. + + +%% @doc Format the usage line that is shown for the options' usage. Each usage +%% line has 2 columns. The first column shows the options in their short +%% and long form. The second column shows the wrapped (if necessary) help +%% text lines associated with each option. e.g.: +%% +%% -h, --host Database server host name or IP address; this is the +%% hostname of the server where the database is running +%% [default: localhost] +%% -p, --port Database server port [default: 1000] +%% +-spec format_usage_line(MaxOptionLength :: non_neg_integer(), MaxLineLength :: non_neg_integer(), + usage_line_with_length()) -> iolist(). +format_usage_line(MaxOptionLength, MaxLineLength, {OptionLength, OptionText, [_ | _] = HelpText}) + when MaxOptionLength < (MaxLineLength div 2) -> + %% If the width of the column where the options are shown is smaller than + %% half the width of a console line then we show the help text line aligned + %% next to its corresponding option, with a separation of at least 2 + %% characters. + [Head | Tail] = wrap_text_line(MaxLineLength - MaxOptionLength - 3, HelpText), + FirstLineIndentation = lists:duplicate(MaxOptionLength - OptionLength + 1, $\s), + Indentation = [$\n | lists:duplicate(MaxOptionLength + 3, $\s)], + [" ", OptionText, FirstLineIndentation, Head, + [[Indentation, Line] || Line <- Tail], $\n]; +format_usage_line(_MaxOptionLength, MaxLineLength, {_OptionLength, OptionText, [_ | _] = HelpText}) -> + %% If the width of the first column is bigger than the width of a console + %% line, we show the help text on the next line with an indentation of 6 + %% characters. + HelpLines = wrap_text_line(MaxLineLength - 6, HelpText), + [" ", OptionText, [["\n ", Line] || Line <- HelpLines], $\n]; +format_usage_line(_MaxOptionLength, _MaxLineLength, {_OptionLength, OptionText, _HelpText}) -> + [" ", OptionText, $\n]. + + +%% @doc Wrap a text line converting it into several text lines so that the +%% length of each one of them is never over Length characters. +-spec wrap_text_line(Length :: non_neg_integer(), Text :: string()) -> [string()]. +wrap_text_line(Length, Text) -> + wrap_text_line(Length, Text, [], 0, []). + +wrap_text_line(Length, [Char | Tail], Acc, Count, CurrentLineAcc) when Count < Length -> + wrap_text_line(Length, Tail, Acc, Count + 1, [Char | CurrentLineAcc]); +wrap_text_line(Length, [_ | _] = Help, Acc, Count, CurrentLineAcc) -> + %% Look for the first whitespace character in the current (reversed) line + %% buffer to get a wrapped line. If there is no whitespace just cut the + %% line at the position corresponding to the maximum length. + {NextLineAcc, WrappedLine} = case cspan(CurrentLineAcc, " \t") of + WhitespacePos when WhitespacePos < Count -> + lists:split(WhitespacePos, CurrentLineAcc); + _ -> + {[], CurrentLineAcc} + end, + wrap_text_line(Length, Help, [lists:reverse(WrappedLine) | Acc], length(NextLineAcc), NextLineAcc); +wrap_text_line(_Length, [], Acc, _Count, [_ | _] = CurrentLineAcc) -> + %% If there was a non-empty line when we reached the buffer, add it to the accumulator + lists:reverse([lists:reverse(CurrentLineAcc) | Acc]); +wrap_text_line(_Length, [], Acc, _Count, _CurrentLineAcc) -> + lists:reverse(Acc). + + +default_arg_value_to_string(Value) when is_atom(Value) -> + atom_to_list(Value); +default_arg_value_to_string(Value) when is_binary(Value) -> + binary_to_list(Value); +default_arg_value_to_string(Value) when is_integer(Value) -> + integer_to_list(Value); +default_arg_value_to_string(Value) when is_float(Value) -> + lists:flatten(io_lib:format("~w", [Value])); +default_arg_value_to_string(Value) -> + Value. + + +%% @doc Tokenize a command line string with support for single and double +%% quoted arguments (needed for arguments that have embedded whitespace). +%% The function also supports the expansion of environment variables in +%% both the Unix (${VAR}; $VAR) and Windows (%VAR%) formats. It does NOT +%% support wildcard expansion of paths. +-spec tokenize(CmdLine :: string()) -> [nonempty_string()]. +tokenize(CmdLine) -> + tokenize(CmdLine, [], []). + +-spec tokenize(CmdLine :: string(), Acc :: [string()], ArgAcc :: string()) -> [string()]. +tokenize([Sep | Tail], Acc, ArgAcc) when ?IS_WHITESPACE(Sep) -> + NewAcc = case ArgAcc of + [_ | _] -> + %% Found separator: add to the list of arguments. + [lists:reverse(ArgAcc) | Acc]; + [] -> + %% Found separator with no accumulated argument; discard it. + Acc + end, + tokenize(Tail, NewAcc, []); +tokenize([QuotationMark | Tail], Acc, ArgAcc) when QuotationMark =:= $"; QuotationMark =:= $' -> + %% Quoted argument (might contain spaces, tabs, etc.) + tokenize_quoted_arg(QuotationMark, Tail, Acc, ArgAcc); +tokenize([Char | _Tail] = CmdLine, Acc, ArgAcc) when Char =:= $$; Char =:= $% -> + %% Unix and Windows environment variable expansion: ${VAR}; $VAR; %VAR% + {NewCmdLine, Var} = expand_env_var(CmdLine), + tokenize(NewCmdLine, Acc, lists:reverse(Var, ArgAcc)); +tokenize([$\\, Char | Tail], Acc, ArgAcc) -> + %% Escaped char. + tokenize(Tail, Acc, [Char | ArgAcc]); +tokenize([Char | Tail], Acc, ArgAcc) -> + tokenize(Tail, Acc, [Char | ArgAcc]); +tokenize([], Acc, []) -> + lists:reverse(Acc); +tokenize([], Acc, ArgAcc) -> + lists:reverse([lists:reverse(ArgAcc) | Acc]). + +-spec tokenize_quoted_arg(QuotationMark :: char(), CmdLine :: string(), Acc :: [string()], ArgAcc :: string()) -> [string()]. +tokenize_quoted_arg(QuotationMark, [QuotationMark | Tail], Acc, ArgAcc) -> + %% End of quoted argument + tokenize(Tail, Acc, ArgAcc); +tokenize_quoted_arg(QuotationMark, [$\\, Char | Tail], Acc, ArgAcc) -> + %% Escaped char. + tokenize_quoted_arg(QuotationMark, Tail, Acc, [Char | ArgAcc]); +tokenize_quoted_arg($" = QuotationMark, [Char | _Tail] = CmdLine, Acc, ArgAcc) when Char =:= $$; Char =:= $% -> + %% Unix and Windows environment variable expansion (only for double-quoted arguments): ${VAR}; $VAR; %VAR% + {NewCmdLine, Var} = expand_env_var(CmdLine), + tokenize_quoted_arg(QuotationMark, NewCmdLine, Acc, lists:reverse(Var, ArgAcc)); +tokenize_quoted_arg(QuotationMark, [Char | Tail], Acc, ArgAcc) -> + tokenize_quoted_arg(QuotationMark, Tail, Acc, [Char | ArgAcc]); +tokenize_quoted_arg(_QuotationMark, CmdLine, Acc, ArgAcc) -> + tokenize(CmdLine, Acc, ArgAcc). + + +-spec expand_env_var(CmdLine :: nonempty_string()) -> {string(), string()}. +expand_env_var(CmdLine) -> + case CmdLine of + "${" ++ Tail -> + expand_env_var("${", $}, Tail, []); + "$" ++ Tail -> + expand_env_var("$", Tail, []); + "%" ++ Tail -> + expand_env_var("%", $%, Tail, []) + end. + +-spec expand_env_var(Prefix :: string(), EndMark :: char(), CmdLine :: string(), Acc :: string()) -> {string(), string()}. +expand_env_var(Prefix, EndMark, [Char | Tail], Acc) + when (Char >= $A andalso Char =< $Z) orelse (Char >= $a andalso Char =< $z) orelse + (Char >= $0 andalso Char =< $9) orelse (Char =:= $_) -> + expand_env_var(Prefix, EndMark, Tail, [Char | Acc]); +expand_env_var(Prefix, EndMark, [EndMark | Tail], Acc) -> + {Tail, get_env_var(Prefix, [EndMark], Acc)}; +expand_env_var(Prefix, _EndMark, CmdLine, Acc) -> + {CmdLine, Prefix ++ lists:reverse(Acc)}. + + +-spec expand_env_var(Prefix :: string(), CmdLine :: string(), Acc :: string()) -> {string(), string()}. +expand_env_var(Prefix, [Char | Tail], Acc) + when (Char >= $A andalso Char =< $Z) orelse (Char >= $a andalso Char =< $z) orelse + (Char >= $0 andalso Char =< $9) orelse (Char =:= $_) -> + expand_env_var(Prefix, Tail, [Char | Acc]); +expand_env_var(Prefix, CmdLine, Acc) -> + {CmdLine, get_env_var(Prefix, "", Acc)}. + + +-spec get_env_var(Prefix :: string(), Suffix :: string(), Acc :: string()) -> string(). +get_env_var(Prefix, Suffix, [_ | _] = Acc) -> + Name = lists:reverse(Acc), + %% Only expand valid/existing variables. + case os:getenv(Name) of + false -> Prefix ++ Name ++ Suffix; + Value -> Value + end; +get_env_var(Prefix, Suffix, []) -> + Prefix ++ Suffix. + + +-spec line_length() -> 0..?LINE_LENGTH. +line_length() -> + case io:columns() of + {ok, Columns} when Columns < ?LINE_LENGTH -> + Columns - 1; + _ -> + ?LINE_LENGTH + end. + + +-spec to_string(term()) -> string(). +to_string(List) when is_list(List) -> + case io_lib:printable_list(List) of + true -> List; + false -> io_lib:format("~p", [List]) + end; +to_string(Atom) when is_atom(Atom) -> + atom_to_list(Atom); +to_string(Value) -> + io_lib:format("~p", [Value]). + +%% OTP-20/21 conversion to unicode string module +-ifdef(unicode_str). +lowercase(Str) -> string:lowercase(Str). +lexemes(Str, Separators) -> string:lexemes(Str, Separators). +cspan(Str, Chars) -> length(element(1,string:take(Str, Chars, true))). +-else. +lowercase(Str) -> string:to_lower(Str). +lexemes(Str, Separators) -> string:tokens(Str, Separators). +cspan(Str, Chars) -> string:cspan(Str, Chars). +-endif. + diff --git a/deps/gun/LICENSE b/deps/gun/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..26142cc6065e3d56094e6b1f99ddbc909da63f59 --- /dev/null +++ b/deps/gun/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2013-2018, Loïc Hoguin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/gun/Makefile b/deps/gun/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e4c61563483818147cf09dc989db2c0107d5f173 --- /dev/null +++ b/deps/gun/Makefile @@ -0,0 +1,58 @@ +# See LICENSE for licensing information. + +PROJECT = gun +PROJECT_DESCRIPTION = HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP. +PROJECT_VERSION = 1.3.2 + +# Options. + +CT_OPTS += -pa test -ct_hooks gun_ct_hook [] # -boot start_sasl + +# Dependencies. + +LOCAL_DEPS = ssl + +DEPS = cowlib +dep_cowlib = git https://github.com/ninenines/cowlib 2.6.0 + +DOC_DEPS = asciideck + +TEST_DEPS = $(if $(CI_ERLANG_MK),ci.erlang.mk) ct_helper cowboy +dep_ct_helper = git https://github.com/extend/ct_helper.git master +dep_cowboy_commit = 2.6.0 + +# CI configuration. + +dep_ci.erlang.mk = git https://github.com/ninenines/ci.erlang.mk master +DEP_EARLY_PLUGINS = ci.erlang.mk + +AUTO_CI_OTP ?= OTP-20+ +AUTO_CI_HIPE ?= OTP-LATEST +# AUTO_CI_ERLLVM ?= OTP-LATEST +AUTO_CI_WINDOWS ?= OTP-20+ + +# Standard targets. + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) + +# Generate rebar.config on build. + +app:: rebar.config + +# h2specd setup. + +GOPATH := $(ERLANG_MK_TMP)/gopath +export GOPATH + +H2SPECD := $(GOPATH)/src/github.com/summerwind/h2spec/h2specd +export H2SPECD + +# @todo It would be better to allow these dependencies to be specified +# on a per-target basis instead of for all targets. +test-build:: $(H2SPECD) + +$(H2SPECD): + $(gen_verbose) mkdir -p $(GOPATH)/src/github.com/summerwind + - $(verbose) git clone --depth 1 https://github.com/summerwind/h2spec $(dir $(H2SPECD)) + - $(verbose) $(MAKE) -C $(dir $(H2SPECD)) build MAKEFLAGS= + - $(verbose) go build -o $(H2SPECD) $(dir $(H2SPECD))/cmd/h2spec/h2specd.go diff --git a/deps/gun/README.asciidoc b/deps/gun/README.asciidoc new file mode 100644 index 0000000000000000000000000000000000000000..74218301526f4e5f6dc77935329c954e9185cbfe --- /dev/null +++ b/deps/gun/README.asciidoc @@ -0,0 +1,42 @@ += Gun + +Gun is an Erlang HTTP client with support for HTTP/1.1, HTTP/2 and Websocket. + +== Goals + +Gun aims to provide an *easy to use* client compatible with +HTTP/1.1, HTTP/2 and Websocket. + +Gun is *always connected*. It will maintain a permanent +connection to the server, reopening it as soon as the server +closes it, saving time for the requests that come in. + +All connections are *supervised* automatically, allowing +developers to focus on writing their code without worrying. + +== Sponsors + +The project is currently sponsored by +https://kato.im[Kato.im] and https://sameroom.io[Sameroom]. + +The now removed SPDY implementation was sponsored by +http://www.leofs.org[LeoFS Cloud Storage]. + +== Online documentation + +* https://ninenines.eu/docs/en/gun/1.3/guide[User guide] +* https://ninenines.eu/docs/en/gun/1.3/manual[Function reference] + +== Offline documentation + +* While still online, run `make docs` +* User guide available in `doc/` in PDF and HTML formats +* Function reference man pages available in `doc/man3/` and `doc/man7/` +* Run `make install-docs` to install man pages on your system +* Full documentation in Asciidoc available in `doc/src/` + +== Getting help + +* Official IRC Channel: #ninenines on irc.freenode.net +* https://github.com/ninenines/gun/issues[Issues tracker] +* https://ninenines.eu/services/[Commercial Support] diff --git a/deps/gun/erlang.mk b/deps/gun/erlang.mk new file mode 100644 index 0000000000000000000000000000000000000000..fb33c5d94e44f38b77798d49d3bd6e4bd1d38679 --- /dev/null +++ b/deps/gun/erlang.mk @@ -0,0 +1,7287 @@ +# Copyright (c) 2013-2016, Loïc Hoguin +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +.PHONY: all app apps deps search rel relup docs install-docs check tests clean distclean help erlang-mk + +ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) +export ERLANG_MK_FILENAME + +ERLANG_MK_VERSION = 6c8664c +ERLANG_MK_WITHOUT = + +# Make 3.81 and 3.82 are deprecated. + +ifeq ($(MAKE_VERSION),3.81) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +ifeq ($(MAKE_VERSION),3.82) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +# Core configuration. + +PROJECT ?= $(notdir $(CURDIR)) +PROJECT := $(strip $(PROJECT)) + +PROJECT_VERSION ?= rolling +PROJECT_MOD ?= $(PROJECT)_app +PROJECT_ENV ?= [] + +# Verbosity. + +V ?= 0 + +verbose_0 = @ +verbose_2 = set -x; +verbose = $(verbose_$(V)) + +gen_verbose_0 = @echo " GEN " $@; +gen_verbose_2 = set -x; +gen_verbose = $(gen_verbose_$(V)) + +# Temporary files directory. + +ERLANG_MK_TMP ?= $(CURDIR)/.erlang.mk +export ERLANG_MK_TMP + +# "erl" command. + +ERL = erl +A0 -noinput -boot start_clean + +# Platform detection. + +ifeq ($(PLATFORM),) +UNAME_S := $(shell uname -s) + +ifeq ($(UNAME_S),Linux) +PLATFORM = linux +else ifeq ($(UNAME_S),Darwin) +PLATFORM = darwin +else ifeq ($(UNAME_S),SunOS) +PLATFORM = solaris +else ifeq ($(UNAME_S),GNU) +PLATFORM = gnu +else ifeq ($(UNAME_S),FreeBSD) +PLATFORM = freebsd +else ifeq ($(UNAME_S),NetBSD) +PLATFORM = netbsd +else ifeq ($(UNAME_S),OpenBSD) +PLATFORM = openbsd +else ifeq ($(UNAME_S),DragonFly) +PLATFORM = dragonfly +else ifeq ($(shell uname -o),Msys) +PLATFORM = msys2 +else +$(error Unable to detect platform. Please open a ticket with the output of uname -a.) +endif + +export PLATFORM +endif + +# Core targets. + +all:: deps app rel + +# Noop to avoid a Make warning when there's nothing to do. +rel:: + $(verbose) : + +relup:: deps app + +check:: tests + +clean:: clean-crashdump + +clean-crashdump: +ifneq ($(wildcard erl_crash.dump),) + $(gen_verbose) rm -f erl_crash.dump +endif + +distclean:: clean distclean-tmp + +distclean-tmp: + $(gen_verbose) rm -rf $(ERLANG_MK_TMP) + +help:: + $(verbose) printf "%s\n" \ + "erlang.mk (version $(ERLANG_MK_VERSION)) is distributed under the terms of the ISC License." \ + "Copyright (c) 2013-2016 Loïc Hoguin " \ + "" \ + "Usage: [V=1] $(MAKE) [target]..." \ + "" \ + "Core targets:" \ + " all Run deps, app and rel targets in that order" \ + " app Compile the project" \ + " deps Fetch dependencies (if needed) and compile them" \ + " fetch-deps Fetch dependencies recursively (if needed) without compiling them" \ + " list-deps List dependencies recursively on stdout" \ + " search q=... Search for a package in the built-in index" \ + " rel Build a release for this project, if applicable" \ + " docs Build the documentation for this project" \ + " install-docs Install the man pages for this project" \ + " check Compile and run all tests and analysis for this project" \ + " tests Run the tests for this project" \ + " clean Delete temporary and output files from most targets" \ + " distclean Delete all temporary and output files" \ + " help Display this help and exit" \ + " erlang-mk Update erlang.mk to the latest version" + +# Core functions. + +empty := +space := $(empty) $(empty) +tab := $(empty) $(empty) +comma := , + +define newline + + +endef + +define comma_list +$(subst $(space),$(comma),$(strip $(1))) +endef + +define escape_dquotes +$(subst ",\",$1) +endef + +# Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy. +define erlang +$(ERL) $2 -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(call escape_dquotes,$1))" -- erlang.mk +endef + +ifeq ($(PLATFORM),msys2) +core_native_path = $(subst \,\\\\,$(shell cygpath -w $1)) +else +core_native_path = $1 +endif + +core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$1) $2 + +core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) + +core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2))) + +core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) + +core_ls = $(filter-out $(1),$(shell echo $(1))) + +# @todo Use a solution that does not require using perl. +core_relpath = $(shell perl -e 'use File::Spec; print File::Spec->abs2rel(@ARGV) . "\n"' $1 $2) + +# Automated update. + +ERLANG_MK_REPO ?= https://github.com/ninenines/erlang.mk +ERLANG_MK_COMMIT ?= +ERLANG_MK_BUILD_CONFIG ?= build.config +ERLANG_MK_BUILD_DIR ?= .erlang.mk.build + +erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT) +erlang-mk: +ifdef ERLANG_MK_COMMIT + git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) + cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT) +else + git clone --depth 1 $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) +endif + if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi + $(MAKE) -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))' + cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk + rm -rf $(ERLANG_MK_BUILD_DIR) + +# The erlang.mk package index is bundled in the default erlang.mk build. +# Search for the string "copyright" to skip to the rest of the code. + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-kerl + +KERL_INSTALL_DIR ?= $(HOME)/erlang + +ifeq ($(strip $(KERL)),) +KERL := $(ERLANG_MK_TMP)/kerl/kerl +endif + +export KERL + +KERL_GIT ?= https://github.com/kerl/kerl +KERL_COMMIT ?= master + +KERL_MAKEFLAGS ?= + +OTP_GIT ?= https://github.com/erlang/otp + +define kerl_otp_target +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(1)),) +$(KERL_INSTALL_DIR)/$(1): $(KERL) + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1) + $(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1) +endif +endef + +define kerl_hipe_target +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$1-native),) +$(KERL_INSTALL_DIR)/$1-native: $(KERL) + KERL_CONFIGURE_OPTIONS=--enable-native-libs \ + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native + $(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native +endif +endef + +$(KERL): + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl + $(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT) + $(verbose) chmod +x $(KERL) + +distclean:: distclean-kerl + +distclean-kerl: + $(gen_verbose) rm -rf $(KERL) + +# Allow users to select which version of Erlang/OTP to use for a project. + +ifneq ($(strip $(LATEST_ERLANG_OTP)),) +ERLANG_OTP := $(notdir $(lastword $(sort $(filter-out $(KERL_INSTALL_DIR)/OTP_R%,\ + $(filter-out %-rc1 %-rc2 %-rc3,$(wildcard $(KERL_INSTALL_DIR)/*[^-native])))))) +endif + +ERLANG_OTP ?= +ERLANG_HIPE ?= + +# Use kerl to enforce a specific Erlang/OTP version for a project. +ifneq ($(strip $(ERLANG_OTP)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_otp_target,$(ERLANG_OTP))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),) +$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2) +endif + +else +# Same for a HiPE enabled VM. +ifneq ($(strip $(ERLANG_HIPE)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_hipe_target,$(ERLANG_HIPE))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE))$(BUILD_ERLANG_OTP),) +$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE) ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2) +endif + +endif +endif + +PACKAGES += aberth +pkg_aberth_name = aberth +pkg_aberth_description = Generic BERT-RPC server in Erlang +pkg_aberth_homepage = https://github.com/a13x/aberth +pkg_aberth_fetch = git +pkg_aberth_repo = https://github.com/a13x/aberth +pkg_aberth_commit = master + +PACKAGES += active +pkg_active_name = active +pkg_active_description = Active development for Erlang: rebuild and reload source/binary files while the VM is running +pkg_active_homepage = https://github.com/proger/active +pkg_active_fetch = git +pkg_active_repo = https://github.com/proger/active +pkg_active_commit = master + +PACKAGES += actordb_core +pkg_actordb_core_name = actordb_core +pkg_actordb_core_description = ActorDB main source +pkg_actordb_core_homepage = http://www.actordb.com/ +pkg_actordb_core_fetch = git +pkg_actordb_core_repo = https://github.com/biokoda/actordb_core +pkg_actordb_core_commit = master + +PACKAGES += actordb_thrift +pkg_actordb_thrift_name = actordb_thrift +pkg_actordb_thrift_description = Thrift API for ActorDB +pkg_actordb_thrift_homepage = http://www.actordb.com/ +pkg_actordb_thrift_fetch = git +pkg_actordb_thrift_repo = https://github.com/biokoda/actordb_thrift +pkg_actordb_thrift_commit = master + +PACKAGES += aleppo +pkg_aleppo_name = aleppo +pkg_aleppo_description = Alternative Erlang Pre-Processor +pkg_aleppo_homepage = https://github.com/ErlyORM/aleppo +pkg_aleppo_fetch = git +pkg_aleppo_repo = https://github.com/ErlyORM/aleppo +pkg_aleppo_commit = master + +PACKAGES += alog +pkg_alog_name = alog +pkg_alog_description = Simply the best logging framework for Erlang +pkg_alog_homepage = https://github.com/siberian-fast-food/alogger +pkg_alog_fetch = git +pkg_alog_repo = https://github.com/siberian-fast-food/alogger +pkg_alog_commit = master + +PACKAGES += amqp_client +pkg_amqp_client_name = amqp_client +pkg_amqp_client_description = RabbitMQ Erlang AMQP client +pkg_amqp_client_homepage = https://www.rabbitmq.com/erlang-client-user-guide.html +pkg_amqp_client_fetch = git +pkg_amqp_client_repo = https://github.com/rabbitmq/rabbitmq-erlang-client.git +pkg_amqp_client_commit = master + +PACKAGES += annotations +pkg_annotations_name = annotations +pkg_annotations_description = Simple code instrumentation utilities +pkg_annotations_homepage = https://github.com/hyperthunk/annotations +pkg_annotations_fetch = git +pkg_annotations_repo = https://github.com/hyperthunk/annotations +pkg_annotations_commit = master + +PACKAGES += antidote +pkg_antidote_name = antidote +pkg_antidote_description = Large-scale computation without synchronisation +pkg_antidote_homepage = https://syncfree.lip6.fr/ +pkg_antidote_fetch = git +pkg_antidote_repo = https://github.com/SyncFree/antidote +pkg_antidote_commit = master + +PACKAGES += apns +pkg_apns_name = apns +pkg_apns_description = Apple Push Notification Server for Erlang +pkg_apns_homepage = http://inaka.github.com/apns4erl +pkg_apns_fetch = git +pkg_apns_repo = https://github.com/inaka/apns4erl +pkg_apns_commit = master + +PACKAGES += asciideck +pkg_asciideck_name = asciideck +pkg_asciideck_description = Asciidoc for Erlang. +pkg_asciideck_homepage = https://ninenines.eu +pkg_asciideck_fetch = git +pkg_asciideck_repo = https://github.com/ninenines/asciideck +pkg_asciideck_commit = master + +PACKAGES += azdht +pkg_azdht_name = azdht +pkg_azdht_description = Azureus Distributed Hash Table (DHT) in Erlang +pkg_azdht_homepage = https://github.com/arcusfelis/azdht +pkg_azdht_fetch = git +pkg_azdht_repo = https://github.com/arcusfelis/azdht +pkg_azdht_commit = master + +PACKAGES += backoff +pkg_backoff_name = backoff +pkg_backoff_description = Simple exponential backoffs in Erlang +pkg_backoff_homepage = https://github.com/ferd/backoff +pkg_backoff_fetch = git +pkg_backoff_repo = https://github.com/ferd/backoff +pkg_backoff_commit = master + +PACKAGES += barrel_tcp +pkg_barrel_tcp_name = barrel_tcp +pkg_barrel_tcp_description = barrel is a generic TCP acceptor pool with low latency in Erlang. +pkg_barrel_tcp_homepage = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_fetch = git +pkg_barrel_tcp_repo = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_commit = master + +PACKAGES += basho_bench +pkg_basho_bench_name = basho_bench +pkg_basho_bench_description = A load-generation and testing tool for basically whatever you can write a returning Erlang function for. +pkg_basho_bench_homepage = https://github.com/basho/basho_bench +pkg_basho_bench_fetch = git +pkg_basho_bench_repo = https://github.com/basho/basho_bench +pkg_basho_bench_commit = master + +PACKAGES += bcrypt +pkg_bcrypt_name = bcrypt +pkg_bcrypt_description = Bcrypt Erlang / C library +pkg_bcrypt_homepage = https://github.com/erlangpack/bcrypt +pkg_bcrypt_fetch = git +pkg_bcrypt_repo = https://github.com/erlangpack/bcrypt.git +pkg_bcrypt_commit = master + +PACKAGES += beam +pkg_beam_name = beam +pkg_beam_description = BEAM emulator written in Erlang +pkg_beam_homepage = https://github.com/tonyrog/beam +pkg_beam_fetch = git +pkg_beam_repo = https://github.com/tonyrog/beam +pkg_beam_commit = master + +PACKAGES += beanstalk +pkg_beanstalk_name = beanstalk +pkg_beanstalk_description = An Erlang client for beanstalkd +pkg_beanstalk_homepage = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_fetch = git +pkg_beanstalk_repo = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_commit = master + +PACKAGES += bear +pkg_bear_name = bear +pkg_bear_description = a set of statistics functions for erlang +pkg_bear_homepage = https://github.com/boundary/bear +pkg_bear_fetch = git +pkg_bear_repo = https://github.com/boundary/bear +pkg_bear_commit = master + +PACKAGES += bertconf +pkg_bertconf_name = bertconf +pkg_bertconf_description = Make ETS tables out of statc BERT files that are auto-reloaded +pkg_bertconf_homepage = https://github.com/ferd/bertconf +pkg_bertconf_fetch = git +pkg_bertconf_repo = https://github.com/ferd/bertconf +pkg_bertconf_commit = master + +PACKAGES += bifrost +pkg_bifrost_name = bifrost +pkg_bifrost_description = Erlang FTP Server Framework +pkg_bifrost_homepage = https://github.com/thorstadt/bifrost +pkg_bifrost_fetch = git +pkg_bifrost_repo = https://github.com/thorstadt/bifrost +pkg_bifrost_commit = master + +PACKAGES += binpp +pkg_binpp_name = binpp +pkg_binpp_description = Erlang Binary Pretty Printer +pkg_binpp_homepage = https://github.com/jtendo/binpp +pkg_binpp_fetch = git +pkg_binpp_repo = https://github.com/jtendo/binpp +pkg_binpp_commit = master + +PACKAGES += bisect +pkg_bisect_name = bisect +pkg_bisect_description = Ordered fixed-size binary dictionary in Erlang +pkg_bisect_homepage = https://github.com/knutin/bisect +pkg_bisect_fetch = git +pkg_bisect_repo = https://github.com/knutin/bisect +pkg_bisect_commit = master + +PACKAGES += bitcask +pkg_bitcask_name = bitcask +pkg_bitcask_description = because you need another a key/value storage engine +pkg_bitcask_homepage = https://github.com/basho/bitcask +pkg_bitcask_fetch = git +pkg_bitcask_repo = https://github.com/basho/bitcask +pkg_bitcask_commit = develop + +PACKAGES += bitstore +pkg_bitstore_name = bitstore +pkg_bitstore_description = A document based ontology development environment +pkg_bitstore_homepage = https://github.com/bdionne/bitstore +pkg_bitstore_fetch = git +pkg_bitstore_repo = https://github.com/bdionne/bitstore +pkg_bitstore_commit = master + +PACKAGES += bootstrap +pkg_bootstrap_name = bootstrap +pkg_bootstrap_description = A simple, yet powerful Erlang cluster bootstrapping application. +pkg_bootstrap_homepage = https://github.com/schlagert/bootstrap +pkg_bootstrap_fetch = git +pkg_bootstrap_repo = https://github.com/schlagert/bootstrap +pkg_bootstrap_commit = master + +PACKAGES += boss +pkg_boss_name = boss +pkg_boss_description = Erlang web MVC, now featuring Comet +pkg_boss_homepage = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_fetch = git +pkg_boss_repo = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_commit = master + +PACKAGES += boss_db +pkg_boss_db_name = boss_db +pkg_boss_db_description = BossDB: a sharded, caching, pooling, evented ORM for Erlang +pkg_boss_db_homepage = https://github.com/ErlyORM/boss_db +pkg_boss_db_fetch = git +pkg_boss_db_repo = https://github.com/ErlyORM/boss_db +pkg_boss_db_commit = master + +PACKAGES += brod +pkg_brod_name = brod +pkg_brod_description = Kafka client in Erlang +pkg_brod_homepage = https://github.com/klarna/brod +pkg_brod_fetch = git +pkg_brod_repo = https://github.com/klarna/brod.git +pkg_brod_commit = master + +PACKAGES += bson +pkg_bson_name = bson +pkg_bson_description = BSON documents in Erlang, see bsonspec.org +pkg_bson_homepage = https://github.com/comtihon/bson-erlang +pkg_bson_fetch = git +pkg_bson_repo = https://github.com/comtihon/bson-erlang +pkg_bson_commit = master + +PACKAGES += bullet +pkg_bullet_name = bullet +pkg_bullet_description = Simple, reliable, efficient streaming for Cowboy. +pkg_bullet_homepage = http://ninenines.eu +pkg_bullet_fetch = git +pkg_bullet_repo = https://github.com/ninenines/bullet +pkg_bullet_commit = master + +PACKAGES += cache +pkg_cache_name = cache +pkg_cache_description = Erlang in-memory cache +pkg_cache_homepage = https://github.com/fogfish/cache +pkg_cache_fetch = git +pkg_cache_repo = https://github.com/fogfish/cache +pkg_cache_commit = master + +PACKAGES += cake +pkg_cake_name = cake +pkg_cake_description = Really simple terminal colorization +pkg_cake_homepage = https://github.com/darach/cake-erl +pkg_cake_fetch = git +pkg_cake_repo = https://github.com/darach/cake-erl +pkg_cake_commit = master + +PACKAGES += carotene +pkg_carotene_name = carotene +pkg_carotene_description = Real-time server +pkg_carotene_homepage = https://github.com/carotene/carotene +pkg_carotene_fetch = git +pkg_carotene_repo = https://github.com/carotene/carotene +pkg_carotene_commit = master + +PACKAGES += cberl +pkg_cberl_name = cberl +pkg_cberl_description = NIF based Erlang bindings for Couchbase +pkg_cberl_homepage = https://github.com/chitika/cberl +pkg_cberl_fetch = git +pkg_cberl_repo = https://github.com/chitika/cberl +pkg_cberl_commit = master + +PACKAGES += cecho +pkg_cecho_name = cecho +pkg_cecho_description = An ncurses library for Erlang +pkg_cecho_homepage = https://github.com/mazenharake/cecho +pkg_cecho_fetch = git +pkg_cecho_repo = https://github.com/mazenharake/cecho +pkg_cecho_commit = master + +PACKAGES += cferl +pkg_cferl_name = cferl +pkg_cferl_description = Rackspace / Open Stack Cloud Files Erlang Client +pkg_cferl_homepage = https://github.com/ddossot/cferl +pkg_cferl_fetch = git +pkg_cferl_repo = https://github.com/ddossot/cferl +pkg_cferl_commit = master + +PACKAGES += chaos_monkey +pkg_chaos_monkey_name = chaos_monkey +pkg_chaos_monkey_description = This is The CHAOS MONKEY. It will kill your processes. +pkg_chaos_monkey_homepage = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_fetch = git +pkg_chaos_monkey_repo = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_commit = master + +PACKAGES += check_node +pkg_check_node_name = check_node +pkg_check_node_description = Nagios Scripts for monitoring Riak +pkg_check_node_homepage = https://github.com/basho-labs/riak_nagios +pkg_check_node_fetch = git +pkg_check_node_repo = https://github.com/basho-labs/riak_nagios +pkg_check_node_commit = master + +PACKAGES += chronos +pkg_chronos_name = chronos +pkg_chronos_description = Timer module for Erlang that makes it easy to abstact time out of the tests. +pkg_chronos_homepage = https://github.com/lehoff/chronos +pkg_chronos_fetch = git +pkg_chronos_repo = https://github.com/lehoff/chronos +pkg_chronos_commit = master + +PACKAGES += chumak +pkg_chumak_name = chumak +pkg_chumak_description = Pure Erlang implementation of ZeroMQ Message Transport Protocol. +pkg_chumak_homepage = http://choven.ca +pkg_chumak_fetch = git +pkg_chumak_repo = https://github.com/chovencorp/chumak +pkg_chumak_commit = master + +PACKAGES += cl +pkg_cl_name = cl +pkg_cl_description = OpenCL binding for Erlang +pkg_cl_homepage = https://github.com/tonyrog/cl +pkg_cl_fetch = git +pkg_cl_repo = https://github.com/tonyrog/cl +pkg_cl_commit = master + +PACKAGES += clique +pkg_clique_name = clique +pkg_clique_description = CLI Framework for Erlang +pkg_clique_homepage = https://github.com/basho/clique +pkg_clique_fetch = git +pkg_clique_repo = https://github.com/basho/clique +pkg_clique_commit = develop + +PACKAGES += cloudi_core +pkg_cloudi_core_name = cloudi_core +pkg_cloudi_core_description = CloudI internal service runtime +pkg_cloudi_core_homepage = http://cloudi.org/ +pkg_cloudi_core_fetch = git +pkg_cloudi_core_repo = https://github.com/CloudI/cloudi_core +pkg_cloudi_core_commit = master + +PACKAGES += cloudi_service_api_requests +pkg_cloudi_service_api_requests_name = cloudi_service_api_requests +pkg_cloudi_service_api_requests_description = CloudI Service API requests (JSON-RPC/Erlang-term support) +pkg_cloudi_service_api_requests_homepage = http://cloudi.org/ +pkg_cloudi_service_api_requests_fetch = git +pkg_cloudi_service_api_requests_repo = https://github.com/CloudI/cloudi_service_api_requests +pkg_cloudi_service_api_requests_commit = master + +PACKAGES += cloudi_service_db +pkg_cloudi_service_db_name = cloudi_service_db +pkg_cloudi_service_db_description = CloudI Database (in-memory/testing/generic) +pkg_cloudi_service_db_homepage = http://cloudi.org/ +pkg_cloudi_service_db_fetch = git +pkg_cloudi_service_db_repo = https://github.com/CloudI/cloudi_service_db +pkg_cloudi_service_db_commit = master + +PACKAGES += cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_name = cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_description = Cassandra CloudI Service +pkg_cloudi_service_db_cassandra_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_fetch = git +pkg_cloudi_service_db_cassandra_repo = https://github.com/CloudI/cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_commit = master + +PACKAGES += cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_name = cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_description = Cassandra CQL CloudI Service +pkg_cloudi_service_db_cassandra_cql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_cql_fetch = git +pkg_cloudi_service_db_cassandra_cql_repo = https://github.com/CloudI/cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_commit = master + +PACKAGES += cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_name = cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_description = CouchDB CloudI Service +pkg_cloudi_service_db_couchdb_homepage = http://cloudi.org/ +pkg_cloudi_service_db_couchdb_fetch = git +pkg_cloudi_service_db_couchdb_repo = https://github.com/CloudI/cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_commit = master + +PACKAGES += cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_name = cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_description = elasticsearch CloudI Service +pkg_cloudi_service_db_elasticsearch_homepage = http://cloudi.org/ +pkg_cloudi_service_db_elasticsearch_fetch = git +pkg_cloudi_service_db_elasticsearch_repo = https://github.com/CloudI/cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_commit = master + +PACKAGES += cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_name = cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_description = memcached CloudI Service +pkg_cloudi_service_db_memcached_homepage = http://cloudi.org/ +pkg_cloudi_service_db_memcached_fetch = git +pkg_cloudi_service_db_memcached_repo = https://github.com/CloudI/cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_commit = master + +PACKAGES += cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_name = cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_description = MySQL CloudI Service +pkg_cloudi_service_db_mysql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_mysql_fetch = git +pkg_cloudi_service_db_mysql_repo = https://github.com/CloudI/cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_commit = master + +PACKAGES += cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_name = cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_description = PostgreSQL CloudI Service +pkg_cloudi_service_db_pgsql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_pgsql_fetch = git +pkg_cloudi_service_db_pgsql_repo = https://github.com/CloudI/cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_commit = master + +PACKAGES += cloudi_service_db_riak +pkg_cloudi_service_db_riak_name = cloudi_service_db_riak +pkg_cloudi_service_db_riak_description = Riak CloudI Service +pkg_cloudi_service_db_riak_homepage = http://cloudi.org/ +pkg_cloudi_service_db_riak_fetch = git +pkg_cloudi_service_db_riak_repo = https://github.com/CloudI/cloudi_service_db_riak +pkg_cloudi_service_db_riak_commit = master + +PACKAGES += cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_name = cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_description = Tokyo Tyrant CloudI Service +pkg_cloudi_service_db_tokyotyrant_homepage = http://cloudi.org/ +pkg_cloudi_service_db_tokyotyrant_fetch = git +pkg_cloudi_service_db_tokyotyrant_repo = https://github.com/CloudI/cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_commit = master + +PACKAGES += cloudi_service_filesystem +pkg_cloudi_service_filesystem_name = cloudi_service_filesystem +pkg_cloudi_service_filesystem_description = Filesystem CloudI Service +pkg_cloudi_service_filesystem_homepage = http://cloudi.org/ +pkg_cloudi_service_filesystem_fetch = git +pkg_cloudi_service_filesystem_repo = https://github.com/CloudI/cloudi_service_filesystem +pkg_cloudi_service_filesystem_commit = master + +PACKAGES += cloudi_service_http_client +pkg_cloudi_service_http_client_name = cloudi_service_http_client +pkg_cloudi_service_http_client_description = HTTP client CloudI Service +pkg_cloudi_service_http_client_homepage = http://cloudi.org/ +pkg_cloudi_service_http_client_fetch = git +pkg_cloudi_service_http_client_repo = https://github.com/CloudI/cloudi_service_http_client +pkg_cloudi_service_http_client_commit = master + +PACKAGES += cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_name = cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_description = cowboy HTTP/HTTPS CloudI Service +pkg_cloudi_service_http_cowboy_homepage = http://cloudi.org/ +pkg_cloudi_service_http_cowboy_fetch = git +pkg_cloudi_service_http_cowboy_repo = https://github.com/CloudI/cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_commit = master + +PACKAGES += cloudi_service_http_elli +pkg_cloudi_service_http_elli_name = cloudi_service_http_elli +pkg_cloudi_service_http_elli_description = elli HTTP CloudI Service +pkg_cloudi_service_http_elli_homepage = http://cloudi.org/ +pkg_cloudi_service_http_elli_fetch = git +pkg_cloudi_service_http_elli_repo = https://github.com/CloudI/cloudi_service_http_elli +pkg_cloudi_service_http_elli_commit = master + +PACKAGES += cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_name = cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_description = Map/Reduce CloudI Service +pkg_cloudi_service_map_reduce_homepage = http://cloudi.org/ +pkg_cloudi_service_map_reduce_fetch = git +pkg_cloudi_service_map_reduce_repo = https://github.com/CloudI/cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_commit = master + +PACKAGES += cloudi_service_oauth1 +pkg_cloudi_service_oauth1_name = cloudi_service_oauth1 +pkg_cloudi_service_oauth1_description = OAuth v1.0 CloudI Service +pkg_cloudi_service_oauth1_homepage = http://cloudi.org/ +pkg_cloudi_service_oauth1_fetch = git +pkg_cloudi_service_oauth1_repo = https://github.com/CloudI/cloudi_service_oauth1 +pkg_cloudi_service_oauth1_commit = master + +PACKAGES += cloudi_service_queue +pkg_cloudi_service_queue_name = cloudi_service_queue +pkg_cloudi_service_queue_description = Persistent Queue Service +pkg_cloudi_service_queue_homepage = http://cloudi.org/ +pkg_cloudi_service_queue_fetch = git +pkg_cloudi_service_queue_repo = https://github.com/CloudI/cloudi_service_queue +pkg_cloudi_service_queue_commit = master + +PACKAGES += cloudi_service_quorum +pkg_cloudi_service_quorum_name = cloudi_service_quorum +pkg_cloudi_service_quorum_description = CloudI Quorum Service +pkg_cloudi_service_quorum_homepage = http://cloudi.org/ +pkg_cloudi_service_quorum_fetch = git +pkg_cloudi_service_quorum_repo = https://github.com/CloudI/cloudi_service_quorum +pkg_cloudi_service_quorum_commit = master + +PACKAGES += cloudi_service_router +pkg_cloudi_service_router_name = cloudi_service_router +pkg_cloudi_service_router_description = CloudI Router Service +pkg_cloudi_service_router_homepage = http://cloudi.org/ +pkg_cloudi_service_router_fetch = git +pkg_cloudi_service_router_repo = https://github.com/CloudI/cloudi_service_router +pkg_cloudi_service_router_commit = master + +PACKAGES += cloudi_service_tcp +pkg_cloudi_service_tcp_name = cloudi_service_tcp +pkg_cloudi_service_tcp_description = TCP CloudI Service +pkg_cloudi_service_tcp_homepage = http://cloudi.org/ +pkg_cloudi_service_tcp_fetch = git +pkg_cloudi_service_tcp_repo = https://github.com/CloudI/cloudi_service_tcp +pkg_cloudi_service_tcp_commit = master + +PACKAGES += cloudi_service_timers +pkg_cloudi_service_timers_name = cloudi_service_timers +pkg_cloudi_service_timers_description = Timers CloudI Service +pkg_cloudi_service_timers_homepage = http://cloudi.org/ +pkg_cloudi_service_timers_fetch = git +pkg_cloudi_service_timers_repo = https://github.com/CloudI/cloudi_service_timers +pkg_cloudi_service_timers_commit = master + +PACKAGES += cloudi_service_udp +pkg_cloudi_service_udp_name = cloudi_service_udp +pkg_cloudi_service_udp_description = UDP CloudI Service +pkg_cloudi_service_udp_homepage = http://cloudi.org/ +pkg_cloudi_service_udp_fetch = git +pkg_cloudi_service_udp_repo = https://github.com/CloudI/cloudi_service_udp +pkg_cloudi_service_udp_commit = master + +PACKAGES += cloudi_service_validate +pkg_cloudi_service_validate_name = cloudi_service_validate +pkg_cloudi_service_validate_description = CloudI Validate Service +pkg_cloudi_service_validate_homepage = http://cloudi.org/ +pkg_cloudi_service_validate_fetch = git +pkg_cloudi_service_validate_repo = https://github.com/CloudI/cloudi_service_validate +pkg_cloudi_service_validate_commit = master + +PACKAGES += cloudi_service_zeromq +pkg_cloudi_service_zeromq_name = cloudi_service_zeromq +pkg_cloudi_service_zeromq_description = ZeroMQ CloudI Service +pkg_cloudi_service_zeromq_homepage = http://cloudi.org/ +pkg_cloudi_service_zeromq_fetch = git +pkg_cloudi_service_zeromq_repo = https://github.com/CloudI/cloudi_service_zeromq +pkg_cloudi_service_zeromq_commit = master + +PACKAGES += cluster_info +pkg_cluster_info_name = cluster_info +pkg_cluster_info_description = Fork of Hibari's nifty cluster_info OTP app +pkg_cluster_info_homepage = https://github.com/basho/cluster_info +pkg_cluster_info_fetch = git +pkg_cluster_info_repo = https://github.com/basho/cluster_info +pkg_cluster_info_commit = master + +PACKAGES += color +pkg_color_name = color +pkg_color_description = ANSI colors for your Erlang +pkg_color_homepage = https://github.com/julianduque/erlang-color +pkg_color_fetch = git +pkg_color_repo = https://github.com/julianduque/erlang-color +pkg_color_commit = master + +PACKAGES += confetti +pkg_confetti_name = confetti +pkg_confetti_description = Erlang configuration provider / application:get_env/2 on steroids +pkg_confetti_homepage = https://github.com/jtendo/confetti +pkg_confetti_fetch = git +pkg_confetti_repo = https://github.com/jtendo/confetti +pkg_confetti_commit = master + +PACKAGES += couchbeam +pkg_couchbeam_name = couchbeam +pkg_couchbeam_description = Apache CouchDB client in Erlang +pkg_couchbeam_homepage = https://github.com/benoitc/couchbeam +pkg_couchbeam_fetch = git +pkg_couchbeam_repo = https://github.com/benoitc/couchbeam +pkg_couchbeam_commit = master + +PACKAGES += covertool +pkg_covertool_name = covertool +pkg_covertool_description = Tool to convert Erlang cover data files into Cobertura XML reports +pkg_covertool_homepage = https://github.com/idubrov/covertool +pkg_covertool_fetch = git +pkg_covertool_repo = https://github.com/idubrov/covertool +pkg_covertool_commit = master + +PACKAGES += cowboy +pkg_cowboy_name = cowboy +pkg_cowboy_description = Small, fast and modular HTTP server. +pkg_cowboy_homepage = http://ninenines.eu +pkg_cowboy_fetch = git +pkg_cowboy_repo = https://github.com/ninenines/cowboy +pkg_cowboy_commit = 1.0.4 + +PACKAGES += cowdb +pkg_cowdb_name = cowdb +pkg_cowdb_description = Pure Key/Value database library for Erlang Applications +pkg_cowdb_homepage = https://github.com/refuge/cowdb +pkg_cowdb_fetch = git +pkg_cowdb_repo = https://github.com/refuge/cowdb +pkg_cowdb_commit = master + +PACKAGES += cowlib +pkg_cowlib_name = cowlib +pkg_cowlib_description = Support library for manipulating Web protocols. +pkg_cowlib_homepage = http://ninenines.eu +pkg_cowlib_fetch = git +pkg_cowlib_repo = https://github.com/ninenines/cowlib +pkg_cowlib_commit = 1.0.2 + +PACKAGES += cpg +pkg_cpg_name = cpg +pkg_cpg_description = CloudI Process Groups +pkg_cpg_homepage = https://github.com/okeuday/cpg +pkg_cpg_fetch = git +pkg_cpg_repo = https://github.com/okeuday/cpg +pkg_cpg_commit = master + +PACKAGES += cqerl +pkg_cqerl_name = cqerl +pkg_cqerl_description = Native Erlang CQL client for Cassandra +pkg_cqerl_homepage = https://matehat.github.io/cqerl/ +pkg_cqerl_fetch = git +pkg_cqerl_repo = https://github.com/matehat/cqerl +pkg_cqerl_commit = master + +PACKAGES += cr +pkg_cr_name = cr +pkg_cr_description = Chain Replication +pkg_cr_homepage = https://synrc.com/apps/cr/doc/cr.htm +pkg_cr_fetch = git +pkg_cr_repo = https://github.com/spawnproc/cr +pkg_cr_commit = master + +PACKAGES += cuttlefish +pkg_cuttlefish_name = cuttlefish +pkg_cuttlefish_description = never lose your childlike sense of wonder baby cuttlefish, promise me? +pkg_cuttlefish_homepage = https://github.com/basho/cuttlefish +pkg_cuttlefish_fetch = git +pkg_cuttlefish_repo = https://github.com/basho/cuttlefish +pkg_cuttlefish_commit = master + +PACKAGES += damocles +pkg_damocles_name = damocles +pkg_damocles_description = Erlang library for generating adversarial network conditions for QAing distributed applications/systems on a single Linux box. +pkg_damocles_homepage = https://github.com/lostcolony/damocles +pkg_damocles_fetch = git +pkg_damocles_repo = https://github.com/lostcolony/damocles +pkg_damocles_commit = master + +PACKAGES += debbie +pkg_debbie_name = debbie +pkg_debbie_description = .DEB Built In Erlang +pkg_debbie_homepage = https://github.com/crownedgrouse/debbie +pkg_debbie_fetch = git +pkg_debbie_repo = https://github.com/crownedgrouse/debbie +pkg_debbie_commit = master + +PACKAGES += decimal +pkg_decimal_name = decimal +pkg_decimal_description = An Erlang decimal arithmetic library +pkg_decimal_homepage = https://github.com/tim/erlang-decimal +pkg_decimal_fetch = git +pkg_decimal_repo = https://github.com/tim/erlang-decimal +pkg_decimal_commit = master + +PACKAGES += detergent +pkg_detergent_name = detergent +pkg_detergent_description = An emulsifying Erlang SOAP library +pkg_detergent_homepage = https://github.com/devinus/detergent +pkg_detergent_fetch = git +pkg_detergent_repo = https://github.com/devinus/detergent +pkg_detergent_commit = master + +PACKAGES += detest +pkg_detest_name = detest +pkg_detest_description = Tool for running tests on a cluster of erlang nodes +pkg_detest_homepage = https://github.com/biokoda/detest +pkg_detest_fetch = git +pkg_detest_repo = https://github.com/biokoda/detest +pkg_detest_commit = master + +PACKAGES += dh_date +pkg_dh_date_name = dh_date +pkg_dh_date_description = Date formatting / parsing library for erlang +pkg_dh_date_homepage = https://github.com/daleharvey/dh_date +pkg_dh_date_fetch = git +pkg_dh_date_repo = https://github.com/daleharvey/dh_date +pkg_dh_date_commit = master + +PACKAGES += dirbusterl +pkg_dirbusterl_name = dirbusterl +pkg_dirbusterl_description = DirBuster successor in Erlang +pkg_dirbusterl_homepage = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_fetch = git +pkg_dirbusterl_repo = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_commit = master + +PACKAGES += dispcount +pkg_dispcount_name = dispcount +pkg_dispcount_description = Erlang task dispatcher based on ETS counters. +pkg_dispcount_homepage = https://github.com/ferd/dispcount +pkg_dispcount_fetch = git +pkg_dispcount_repo = https://github.com/ferd/dispcount +pkg_dispcount_commit = master + +PACKAGES += dlhttpc +pkg_dlhttpc_name = dlhttpc +pkg_dlhttpc_description = dispcount-based lhttpc fork for massive amounts of requests to limited endpoints +pkg_dlhttpc_homepage = https://github.com/ferd/dlhttpc +pkg_dlhttpc_fetch = git +pkg_dlhttpc_repo = https://github.com/ferd/dlhttpc +pkg_dlhttpc_commit = master + +PACKAGES += dns +pkg_dns_name = dns +pkg_dns_description = Erlang DNS library +pkg_dns_homepage = https://github.com/aetrion/dns_erlang +pkg_dns_fetch = git +pkg_dns_repo = https://github.com/aetrion/dns_erlang +pkg_dns_commit = master + +PACKAGES += dnssd +pkg_dnssd_name = dnssd +pkg_dnssd_description = Erlang interface to Apple's Bonjour D NS Service Discovery implementation +pkg_dnssd_homepage = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_fetch = git +pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_commit = master + +PACKAGES += dynamic_compile +pkg_dynamic_compile_name = dynamic_compile +pkg_dynamic_compile_description = compile and load erlang modules from string input +pkg_dynamic_compile_homepage = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_fetch = git +pkg_dynamic_compile_repo = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_commit = master + +PACKAGES += e2 +pkg_e2_name = e2 +pkg_e2_description = Library to simply writing correct OTP applications. +pkg_e2_homepage = http://e2project.org +pkg_e2_fetch = git +pkg_e2_repo = https://github.com/gar1t/e2 +pkg_e2_commit = master + +PACKAGES += eamf +pkg_eamf_name = eamf +pkg_eamf_description = eAMF provides Action Message Format (AMF) support for Erlang +pkg_eamf_homepage = https://github.com/mrinalwadhwa/eamf +pkg_eamf_fetch = git +pkg_eamf_repo = https://github.com/mrinalwadhwa/eamf +pkg_eamf_commit = master + +PACKAGES += eavro +pkg_eavro_name = eavro +pkg_eavro_description = Apache Avro encoder/decoder +pkg_eavro_homepage = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_fetch = git +pkg_eavro_repo = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_commit = master + +PACKAGES += ecapnp +pkg_ecapnp_name = ecapnp +pkg_ecapnp_description = Cap'n Proto library for Erlang +pkg_ecapnp_homepage = https://github.com/kaos/ecapnp +pkg_ecapnp_fetch = git +pkg_ecapnp_repo = https://github.com/kaos/ecapnp +pkg_ecapnp_commit = master + +PACKAGES += econfig +pkg_econfig_name = econfig +pkg_econfig_description = simple Erlang config handler using INI files +pkg_econfig_homepage = https://github.com/benoitc/econfig +pkg_econfig_fetch = git +pkg_econfig_repo = https://github.com/benoitc/econfig +pkg_econfig_commit = master + +PACKAGES += edate +pkg_edate_name = edate +pkg_edate_description = date manipulation library for erlang +pkg_edate_homepage = https://github.com/dweldon/edate +pkg_edate_fetch = git +pkg_edate_repo = https://github.com/dweldon/edate +pkg_edate_commit = master + +PACKAGES += edgar +pkg_edgar_name = edgar +pkg_edgar_description = Erlang Does GNU AR +pkg_edgar_homepage = https://github.com/crownedgrouse/edgar +pkg_edgar_fetch = git +pkg_edgar_repo = https://github.com/crownedgrouse/edgar +pkg_edgar_commit = master + +PACKAGES += edis +pkg_edis_name = edis +pkg_edis_description = An Erlang implementation of Redis KV Store +pkg_edis_homepage = http://inaka.github.com/edis/ +pkg_edis_fetch = git +pkg_edis_repo = https://github.com/inaka/edis +pkg_edis_commit = master + +PACKAGES += edns +pkg_edns_name = edns +pkg_edns_description = Erlang/OTP DNS server +pkg_edns_homepage = https://github.com/hcvst/erlang-dns +pkg_edns_fetch = git +pkg_edns_repo = https://github.com/hcvst/erlang-dns +pkg_edns_commit = master + +PACKAGES += edown +pkg_edown_name = edown +pkg_edown_description = EDoc extension for generating Github-flavored Markdown +pkg_edown_homepage = https://github.com/uwiger/edown +pkg_edown_fetch = git +pkg_edown_repo = https://github.com/uwiger/edown +pkg_edown_commit = master + +PACKAGES += eep +pkg_eep_name = eep +pkg_eep_description = Erlang Easy Profiling (eep) application provides a way to analyze application performance and call hierarchy +pkg_eep_homepage = https://github.com/virtan/eep +pkg_eep_fetch = git +pkg_eep_repo = https://github.com/virtan/eep +pkg_eep_commit = master + +PACKAGES += eep_app +pkg_eep_app_name = eep_app +pkg_eep_app_description = Embedded Event Processing +pkg_eep_app_homepage = https://github.com/darach/eep-erl +pkg_eep_app_fetch = git +pkg_eep_app_repo = https://github.com/darach/eep-erl +pkg_eep_app_commit = master + +PACKAGES += efene +pkg_efene_name = efene +pkg_efene_description = Alternative syntax for the Erlang Programming Language focusing on simplicity, ease of use and programmer UX +pkg_efene_homepage = https://github.com/efene/efene +pkg_efene_fetch = git +pkg_efene_repo = https://github.com/efene/efene +pkg_efene_commit = master + +PACKAGES += egeoip +pkg_egeoip_name = egeoip +pkg_egeoip_description = Erlang IP Geolocation module, currently supporting the MaxMind GeoLite City Database. +pkg_egeoip_homepage = https://github.com/mochi/egeoip +pkg_egeoip_fetch = git +pkg_egeoip_repo = https://github.com/mochi/egeoip +pkg_egeoip_commit = master + +PACKAGES += ehsa +pkg_ehsa_name = ehsa +pkg_ehsa_description = Erlang HTTP server basic and digest authentication modules +pkg_ehsa_homepage = https://bitbucket.org/a12n/ehsa +pkg_ehsa_fetch = hg +pkg_ehsa_repo = https://bitbucket.org/a12n/ehsa +pkg_ehsa_commit = default + +PACKAGES += ej +pkg_ej_name = ej +pkg_ej_description = Helper module for working with Erlang terms representing JSON +pkg_ej_homepage = https://github.com/seth/ej +pkg_ej_fetch = git +pkg_ej_repo = https://github.com/seth/ej +pkg_ej_commit = master + +PACKAGES += ejabberd +pkg_ejabberd_name = ejabberd +pkg_ejabberd_description = Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform +pkg_ejabberd_homepage = https://github.com/processone/ejabberd +pkg_ejabberd_fetch = git +pkg_ejabberd_repo = https://github.com/processone/ejabberd +pkg_ejabberd_commit = master + +PACKAGES += ejwt +pkg_ejwt_name = ejwt +pkg_ejwt_description = erlang library for JSON Web Token +pkg_ejwt_homepage = https://github.com/artefactop/ejwt +pkg_ejwt_fetch = git +pkg_ejwt_repo = https://github.com/artefactop/ejwt +pkg_ejwt_commit = master + +PACKAGES += ekaf +pkg_ekaf_name = ekaf +pkg_ekaf_description = A minimal, high-performance Kafka client in Erlang. +pkg_ekaf_homepage = https://github.com/helpshift/ekaf +pkg_ekaf_fetch = git +pkg_ekaf_repo = https://github.com/helpshift/ekaf +pkg_ekaf_commit = master + +PACKAGES += elarm +pkg_elarm_name = elarm +pkg_elarm_description = Alarm Manager for Erlang. +pkg_elarm_homepage = https://github.com/esl/elarm +pkg_elarm_fetch = git +pkg_elarm_repo = https://github.com/esl/elarm +pkg_elarm_commit = master + +PACKAGES += eleveldb +pkg_eleveldb_name = eleveldb +pkg_eleveldb_description = Erlang LevelDB API +pkg_eleveldb_homepage = https://github.com/basho/eleveldb +pkg_eleveldb_fetch = git +pkg_eleveldb_repo = https://github.com/basho/eleveldb +pkg_eleveldb_commit = master + +PACKAGES += elli +pkg_elli_name = elli +pkg_elli_description = Simple, robust and performant Erlang web server +pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_fetch = git +pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_commit = master + +PACKAGES += elvis +pkg_elvis_name = elvis +pkg_elvis_description = Erlang Style Reviewer +pkg_elvis_homepage = https://github.com/inaka/elvis +pkg_elvis_fetch = git +pkg_elvis_repo = https://github.com/inaka/elvis +pkg_elvis_commit = master + +PACKAGES += emagick +pkg_emagick_name = emagick +pkg_emagick_description = Wrapper for Graphics/ImageMagick command line tool. +pkg_emagick_homepage = https://github.com/kivra/emagick +pkg_emagick_fetch = git +pkg_emagick_repo = https://github.com/kivra/emagick +pkg_emagick_commit = master + +PACKAGES += emysql +pkg_emysql_name = emysql +pkg_emysql_description = Stable, pure Erlang MySQL driver. +pkg_emysql_homepage = https://github.com/Eonblast/Emysql +pkg_emysql_fetch = git +pkg_emysql_repo = https://github.com/Eonblast/Emysql +pkg_emysql_commit = master + +PACKAGES += enm +pkg_enm_name = enm +pkg_enm_description = Erlang driver for nanomsg +pkg_enm_homepage = https://github.com/basho/enm +pkg_enm_fetch = git +pkg_enm_repo = https://github.com/basho/enm +pkg_enm_commit = master + +PACKAGES += entop +pkg_entop_name = entop +pkg_entop_description = A top-like tool for monitoring an Erlang node +pkg_entop_homepage = https://github.com/mazenharake/entop +pkg_entop_fetch = git +pkg_entop_repo = https://github.com/mazenharake/entop +pkg_entop_commit = master + +PACKAGES += epcap +pkg_epcap_name = epcap +pkg_epcap_description = Erlang packet capture interface using pcap +pkg_epcap_homepage = https://github.com/msantos/epcap +pkg_epcap_fetch = git +pkg_epcap_repo = https://github.com/msantos/epcap +pkg_epcap_commit = master + +PACKAGES += eper +pkg_eper_name = eper +pkg_eper_description = Erlang performance and debugging tools. +pkg_eper_homepage = https://github.com/massemanet/eper +pkg_eper_fetch = git +pkg_eper_repo = https://github.com/massemanet/eper +pkg_eper_commit = master + +PACKAGES += epgsql +pkg_epgsql_name = epgsql +pkg_epgsql_description = Erlang PostgreSQL client library. +pkg_epgsql_homepage = https://github.com/epgsql/epgsql +pkg_epgsql_fetch = git +pkg_epgsql_repo = https://github.com/epgsql/epgsql +pkg_epgsql_commit = master + +PACKAGES += episcina +pkg_episcina_name = episcina +pkg_episcina_description = A simple non intrusive resource pool for connections +pkg_episcina_homepage = https://github.com/erlware/episcina +pkg_episcina_fetch = git +pkg_episcina_repo = https://github.com/erlware/episcina +pkg_episcina_commit = master + +PACKAGES += eplot +pkg_eplot_name = eplot +pkg_eplot_description = A plot engine written in erlang. +pkg_eplot_homepage = https://github.com/psyeugenic/eplot +pkg_eplot_fetch = git +pkg_eplot_repo = https://github.com/psyeugenic/eplot +pkg_eplot_commit = master + +PACKAGES += epocxy +pkg_epocxy_name = epocxy +pkg_epocxy_description = Erlang Patterns of Concurrency +pkg_epocxy_homepage = https://github.com/duomark/epocxy +pkg_epocxy_fetch = git +pkg_epocxy_repo = https://github.com/duomark/epocxy +pkg_epocxy_commit = master + +PACKAGES += epubnub +pkg_epubnub_name = epubnub +pkg_epubnub_description = Erlang PubNub API +pkg_epubnub_homepage = https://github.com/tsloughter/epubnub +pkg_epubnub_fetch = git +pkg_epubnub_repo = https://github.com/tsloughter/epubnub +pkg_epubnub_commit = master + +PACKAGES += eqm +pkg_eqm_name = eqm +pkg_eqm_description = Erlang pub sub with supply-demand channels +pkg_eqm_homepage = https://github.com/loucash/eqm +pkg_eqm_fetch = git +pkg_eqm_repo = https://github.com/loucash/eqm +pkg_eqm_commit = master + +PACKAGES += eredis +pkg_eredis_name = eredis +pkg_eredis_description = Erlang Redis client +pkg_eredis_homepage = https://github.com/wooga/eredis +pkg_eredis_fetch = git +pkg_eredis_repo = https://github.com/wooga/eredis +pkg_eredis_commit = master + +PACKAGES += eredis_pool +pkg_eredis_pool_name = eredis_pool +pkg_eredis_pool_description = eredis_pool is Pool of Redis clients, using eredis and poolboy. +pkg_eredis_pool_homepage = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_fetch = git +pkg_eredis_pool_repo = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_commit = master + +PACKAGES += erl_streams +pkg_erl_streams_name = erl_streams +pkg_erl_streams_description = Streams in Erlang +pkg_erl_streams_homepage = https://github.com/epappas/erl_streams +pkg_erl_streams_fetch = git +pkg_erl_streams_repo = https://github.com/epappas/erl_streams +pkg_erl_streams_commit = master + +PACKAGES += erlang_cep +pkg_erlang_cep_name = erlang_cep +pkg_erlang_cep_description = A basic CEP package written in erlang +pkg_erlang_cep_homepage = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_fetch = git +pkg_erlang_cep_repo = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_commit = master + +PACKAGES += erlang_js +pkg_erlang_js_name = erlang_js +pkg_erlang_js_description = A linked-in driver for Erlang to Mozilla's Spidermonkey Javascript runtime. +pkg_erlang_js_homepage = https://github.com/basho/erlang_js +pkg_erlang_js_fetch = git +pkg_erlang_js_repo = https://github.com/basho/erlang_js +pkg_erlang_js_commit = master + +PACKAGES += erlang_localtime +pkg_erlang_localtime_name = erlang_localtime +pkg_erlang_localtime_description = Erlang library for conversion from one local time to another +pkg_erlang_localtime_homepage = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_fetch = git +pkg_erlang_localtime_repo = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_commit = master + +PACKAGES += erlang_smtp +pkg_erlang_smtp_name = erlang_smtp +pkg_erlang_smtp_description = Erlang SMTP and POP3 server code. +pkg_erlang_smtp_homepage = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_fetch = git +pkg_erlang_smtp_repo = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_commit = master + +PACKAGES += erlang_term +pkg_erlang_term_name = erlang_term +pkg_erlang_term_description = Erlang Term Info +pkg_erlang_term_homepage = https://github.com/okeuday/erlang_term +pkg_erlang_term_fetch = git +pkg_erlang_term_repo = https://github.com/okeuday/erlang_term +pkg_erlang_term_commit = master + +PACKAGES += erlastic_search +pkg_erlastic_search_name = erlastic_search +pkg_erlastic_search_description = An Erlang app for communicating with Elastic Search's rest interface. +pkg_erlastic_search_homepage = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_fetch = git +pkg_erlastic_search_repo = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_commit = master + +PACKAGES += erlasticsearch +pkg_erlasticsearch_name = erlasticsearch +pkg_erlasticsearch_description = Erlang thrift interface to elastic_search +pkg_erlasticsearch_homepage = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_fetch = git +pkg_erlasticsearch_repo = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_commit = master + +PACKAGES += erlbrake +pkg_erlbrake_name = erlbrake +pkg_erlbrake_description = Erlang Airbrake notification client +pkg_erlbrake_homepage = https://github.com/kenpratt/erlbrake +pkg_erlbrake_fetch = git +pkg_erlbrake_repo = https://github.com/kenpratt/erlbrake +pkg_erlbrake_commit = master + +PACKAGES += erlcloud +pkg_erlcloud_name = erlcloud +pkg_erlcloud_description = Cloud Computing library for erlang (Amazon EC2, S3, SQS, SimpleDB, Mechanical Turk, ELB) +pkg_erlcloud_homepage = https://github.com/gleber/erlcloud +pkg_erlcloud_fetch = git +pkg_erlcloud_repo = https://github.com/gleber/erlcloud +pkg_erlcloud_commit = master + +PACKAGES += erlcron +pkg_erlcron_name = erlcron +pkg_erlcron_description = Erlang cronish system +pkg_erlcron_homepage = https://github.com/erlware/erlcron +pkg_erlcron_fetch = git +pkg_erlcron_repo = https://github.com/erlware/erlcron +pkg_erlcron_commit = master + +PACKAGES += erldb +pkg_erldb_name = erldb +pkg_erldb_description = ORM (Object-relational mapping) application implemented in Erlang +pkg_erldb_homepage = http://erldb.org +pkg_erldb_fetch = git +pkg_erldb_repo = https://github.com/erldb/erldb +pkg_erldb_commit = master + +PACKAGES += erldis +pkg_erldis_name = erldis +pkg_erldis_description = redis erlang client library +pkg_erldis_homepage = https://github.com/cstar/erldis +pkg_erldis_fetch = git +pkg_erldis_repo = https://github.com/cstar/erldis +pkg_erldis_commit = master + +PACKAGES += erldns +pkg_erldns_name = erldns +pkg_erldns_description = DNS server, in erlang. +pkg_erldns_homepage = https://github.com/aetrion/erl-dns +pkg_erldns_fetch = git +pkg_erldns_repo = https://github.com/aetrion/erl-dns +pkg_erldns_commit = master + +PACKAGES += erldocker +pkg_erldocker_name = erldocker +pkg_erldocker_description = Docker Remote API client for Erlang +pkg_erldocker_homepage = https://github.com/proger/erldocker +pkg_erldocker_fetch = git +pkg_erldocker_repo = https://github.com/proger/erldocker +pkg_erldocker_commit = master + +PACKAGES += erlfsmon +pkg_erlfsmon_name = erlfsmon +pkg_erlfsmon_description = Erlang filesystem event watcher for Linux and OSX +pkg_erlfsmon_homepage = https://github.com/proger/erlfsmon +pkg_erlfsmon_fetch = git +pkg_erlfsmon_repo = https://github.com/proger/erlfsmon +pkg_erlfsmon_commit = master + +PACKAGES += erlgit +pkg_erlgit_name = erlgit +pkg_erlgit_description = Erlang convenience wrapper around git executable +pkg_erlgit_homepage = https://github.com/gleber/erlgit +pkg_erlgit_fetch = git +pkg_erlgit_repo = https://github.com/gleber/erlgit +pkg_erlgit_commit = master + +PACKAGES += erlguten +pkg_erlguten_name = erlguten +pkg_erlguten_description = ErlGuten is a system for high-quality typesetting, written purely in Erlang. +pkg_erlguten_homepage = https://github.com/richcarl/erlguten +pkg_erlguten_fetch = git +pkg_erlguten_repo = https://github.com/richcarl/erlguten +pkg_erlguten_commit = master + +PACKAGES += erlmc +pkg_erlmc_name = erlmc +pkg_erlmc_description = Erlang memcached binary protocol client +pkg_erlmc_homepage = https://github.com/jkvor/erlmc +pkg_erlmc_fetch = git +pkg_erlmc_repo = https://github.com/jkvor/erlmc +pkg_erlmc_commit = master + +PACKAGES += erlmongo +pkg_erlmongo_name = erlmongo +pkg_erlmongo_description = Record based Erlang driver for MongoDB with gridfs support +pkg_erlmongo_homepage = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_fetch = git +pkg_erlmongo_repo = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_commit = master + +PACKAGES += erlog +pkg_erlog_name = erlog +pkg_erlog_description = Prolog interpreter in and for Erlang +pkg_erlog_homepage = https://github.com/rvirding/erlog +pkg_erlog_fetch = git +pkg_erlog_repo = https://github.com/rvirding/erlog +pkg_erlog_commit = master + +PACKAGES += erlpass +pkg_erlpass_name = erlpass +pkg_erlpass_description = A library to handle password hashing and changing in a safe manner, independent from any kind of storage whatsoever. +pkg_erlpass_homepage = https://github.com/ferd/erlpass +pkg_erlpass_fetch = git +pkg_erlpass_repo = https://github.com/ferd/erlpass +pkg_erlpass_commit = master + +PACKAGES += erlport +pkg_erlport_name = erlport +pkg_erlport_description = ErlPort - connect Erlang to other languages +pkg_erlport_homepage = https://github.com/hdima/erlport +pkg_erlport_fetch = git +pkg_erlport_repo = https://github.com/hdima/erlport +pkg_erlport_commit = master + +PACKAGES += erlsh +pkg_erlsh_name = erlsh +pkg_erlsh_description = Erlang shell tools +pkg_erlsh_homepage = https://github.com/proger/erlsh +pkg_erlsh_fetch = git +pkg_erlsh_repo = https://github.com/proger/erlsh +pkg_erlsh_commit = master + +PACKAGES += erlsha2 +pkg_erlsha2_name = erlsha2 +pkg_erlsha2_description = SHA-224, SHA-256, SHA-384, SHA-512 implemented in Erlang NIFs. +pkg_erlsha2_homepage = https://github.com/vinoski/erlsha2 +pkg_erlsha2_fetch = git +pkg_erlsha2_repo = https://github.com/vinoski/erlsha2 +pkg_erlsha2_commit = master + +PACKAGES += erlsom +pkg_erlsom_name = erlsom +pkg_erlsom_description = XML parser for Erlang +pkg_erlsom_homepage = https://github.com/willemdj/erlsom +pkg_erlsom_fetch = git +pkg_erlsom_repo = https://github.com/willemdj/erlsom +pkg_erlsom_commit = master + +PACKAGES += erlubi +pkg_erlubi_name = erlubi +pkg_erlubi_description = Ubigraph Erlang Client (and Process Visualizer) +pkg_erlubi_homepage = https://github.com/krestenkrab/erlubi +pkg_erlubi_fetch = git +pkg_erlubi_repo = https://github.com/krestenkrab/erlubi +pkg_erlubi_commit = master + +PACKAGES += erlvolt +pkg_erlvolt_name = erlvolt +pkg_erlvolt_description = VoltDB Erlang Client Driver +pkg_erlvolt_homepage = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_fetch = git +pkg_erlvolt_repo = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_commit = master + +PACKAGES += erlware_commons +pkg_erlware_commons_name = erlware_commons +pkg_erlware_commons_description = Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components. +pkg_erlware_commons_homepage = https://github.com/erlware/erlware_commons +pkg_erlware_commons_fetch = git +pkg_erlware_commons_repo = https://github.com/erlware/erlware_commons +pkg_erlware_commons_commit = master + +PACKAGES += erlydtl +pkg_erlydtl_name = erlydtl +pkg_erlydtl_description = Django Template Language for Erlang. +pkg_erlydtl_homepage = https://github.com/erlydtl/erlydtl +pkg_erlydtl_fetch = git +pkg_erlydtl_repo = https://github.com/erlydtl/erlydtl +pkg_erlydtl_commit = master + +PACKAGES += errd +pkg_errd_name = errd +pkg_errd_description = Erlang RRDTool library +pkg_errd_homepage = https://github.com/archaelus/errd +pkg_errd_fetch = git +pkg_errd_repo = https://github.com/archaelus/errd +pkg_errd_commit = master + +PACKAGES += erserve +pkg_erserve_name = erserve +pkg_erserve_description = Erlang/Rserve communication interface +pkg_erserve_homepage = https://github.com/del/erserve +pkg_erserve_fetch = git +pkg_erserve_repo = https://github.com/del/erserve +pkg_erserve_commit = master + +PACKAGES += erwa +pkg_erwa_name = erwa +pkg_erwa_description = A WAMP router and client written in Erlang. +pkg_erwa_homepage = https://github.com/bwegh/erwa +pkg_erwa_fetch = git +pkg_erwa_repo = https://github.com/bwegh/erwa +pkg_erwa_commit = master + +PACKAGES += escalus +pkg_escalus_name = escalus +pkg_escalus_description = An XMPP client library in Erlang for conveniently testing XMPP servers +pkg_escalus_homepage = https://github.com/esl/escalus +pkg_escalus_fetch = git +pkg_escalus_repo = https://github.com/esl/escalus +pkg_escalus_commit = master + +PACKAGES += espec +pkg_espec_name = espec +pkg_espec_description = ESpec: Behaviour driven development framework for Erlang +pkg_espec_homepage = https://github.com/lucaspiller/espec +pkg_espec_fetch = git +pkg_espec_repo = https://github.com/lucaspiller/espec +pkg_espec_commit = master + +PACKAGES += estatsd +pkg_estatsd_name = estatsd +pkg_estatsd_description = Erlang stats aggregation app that periodically flushes data to graphite +pkg_estatsd_homepage = https://github.com/RJ/estatsd +pkg_estatsd_fetch = git +pkg_estatsd_repo = https://github.com/RJ/estatsd +pkg_estatsd_commit = master + +PACKAGES += etap +pkg_etap_name = etap +pkg_etap_description = etap is a simple erlang testing library that provides TAP compliant output. +pkg_etap_homepage = https://github.com/ngerakines/etap +pkg_etap_fetch = git +pkg_etap_repo = https://github.com/ngerakines/etap +pkg_etap_commit = master + +PACKAGES += etest +pkg_etest_name = etest +pkg_etest_description = A lightweight, convention over configuration test framework for Erlang +pkg_etest_homepage = https://github.com/wooga/etest +pkg_etest_fetch = git +pkg_etest_repo = https://github.com/wooga/etest +pkg_etest_commit = master + +PACKAGES += etest_http +pkg_etest_http_name = etest_http +pkg_etest_http_description = etest Assertions around HTTP (client-side) +pkg_etest_http_homepage = https://github.com/wooga/etest_http +pkg_etest_http_fetch = git +pkg_etest_http_repo = https://github.com/wooga/etest_http +pkg_etest_http_commit = master + +PACKAGES += etoml +pkg_etoml_name = etoml +pkg_etoml_description = TOML language erlang parser +pkg_etoml_homepage = https://github.com/kalta/etoml +pkg_etoml_fetch = git +pkg_etoml_repo = https://github.com/kalta/etoml +pkg_etoml_commit = master + +PACKAGES += eunit +pkg_eunit_name = eunit +pkg_eunit_description = The EUnit lightweight unit testing framework for Erlang - this is the canonical development repository. +pkg_eunit_homepage = https://github.com/richcarl/eunit +pkg_eunit_fetch = git +pkg_eunit_repo = https://github.com/richcarl/eunit +pkg_eunit_commit = master + +PACKAGES += eunit_formatters +pkg_eunit_formatters_name = eunit_formatters +pkg_eunit_formatters_description = Because eunit's output sucks. Let's make it better. +pkg_eunit_formatters_homepage = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_fetch = git +pkg_eunit_formatters_repo = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_commit = master + +PACKAGES += euthanasia +pkg_euthanasia_name = euthanasia +pkg_euthanasia_description = Merciful killer for your Erlang processes +pkg_euthanasia_homepage = https://github.com/doubleyou/euthanasia +pkg_euthanasia_fetch = git +pkg_euthanasia_repo = https://github.com/doubleyou/euthanasia +pkg_euthanasia_commit = master + +PACKAGES += evum +pkg_evum_name = evum +pkg_evum_description = Spawn Linux VMs as Erlang processes in the Erlang VM +pkg_evum_homepage = https://github.com/msantos/evum +pkg_evum_fetch = git +pkg_evum_repo = https://github.com/msantos/evum +pkg_evum_commit = master + +PACKAGES += exec +pkg_exec_name = erlexec +pkg_exec_description = Execute and control OS processes from Erlang/OTP. +pkg_exec_homepage = http://saleyn.github.com/erlexec +pkg_exec_fetch = git +pkg_exec_repo = https://github.com/saleyn/erlexec +pkg_exec_commit = master + +PACKAGES += exml +pkg_exml_name = exml +pkg_exml_description = XML parsing library in Erlang +pkg_exml_homepage = https://github.com/paulgray/exml +pkg_exml_fetch = git +pkg_exml_repo = https://github.com/paulgray/exml +pkg_exml_commit = master + +PACKAGES += exometer +pkg_exometer_name = exometer +pkg_exometer_description = Basic measurement objects and probe behavior +pkg_exometer_homepage = https://github.com/Feuerlabs/exometer +pkg_exometer_fetch = git +pkg_exometer_repo = https://github.com/Feuerlabs/exometer +pkg_exometer_commit = master + +PACKAGES += exs1024 +pkg_exs1024_name = exs1024 +pkg_exs1024_description = Xorshift1024star pseudo random number generator for Erlang. +pkg_exs1024_homepage = https://github.com/jj1bdx/exs1024 +pkg_exs1024_fetch = git +pkg_exs1024_repo = https://github.com/jj1bdx/exs1024 +pkg_exs1024_commit = master + +PACKAGES += exs64 +pkg_exs64_name = exs64 +pkg_exs64_description = Xorshift64star pseudo random number generator for Erlang. +pkg_exs64_homepage = https://github.com/jj1bdx/exs64 +pkg_exs64_fetch = git +pkg_exs64_repo = https://github.com/jj1bdx/exs64 +pkg_exs64_commit = master + +PACKAGES += exsplus116 +pkg_exsplus116_name = exsplus116 +pkg_exsplus116_description = Xorshift116plus for Erlang +pkg_exsplus116_homepage = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_fetch = git +pkg_exsplus116_repo = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_commit = master + +PACKAGES += exsplus128 +pkg_exsplus128_name = exsplus128 +pkg_exsplus128_description = Xorshift128plus pseudo random number generator for Erlang. +pkg_exsplus128_homepage = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_fetch = git +pkg_exsplus128_repo = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_commit = master + +PACKAGES += ezmq +pkg_ezmq_name = ezmq +pkg_ezmq_description = zMQ implemented in Erlang +pkg_ezmq_homepage = https://github.com/RoadRunnr/ezmq +pkg_ezmq_fetch = git +pkg_ezmq_repo = https://github.com/RoadRunnr/ezmq +pkg_ezmq_commit = master + +PACKAGES += ezmtp +pkg_ezmtp_name = ezmtp +pkg_ezmtp_description = ZMTP protocol in pure Erlang. +pkg_ezmtp_homepage = https://github.com/a13x/ezmtp +pkg_ezmtp_fetch = git +pkg_ezmtp_repo = https://github.com/a13x/ezmtp +pkg_ezmtp_commit = master + +PACKAGES += fast_disk_log +pkg_fast_disk_log_name = fast_disk_log +pkg_fast_disk_log_description = Pool-based asynchronous Erlang disk logger +pkg_fast_disk_log_homepage = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_fetch = git +pkg_fast_disk_log_repo = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_commit = master + +PACKAGES += feeder +pkg_feeder_name = feeder +pkg_feeder_description = Stream parse RSS and Atom formatted XML feeds. +pkg_feeder_homepage = https://github.com/michaelnisi/feeder +pkg_feeder_fetch = git +pkg_feeder_repo = https://github.com/michaelnisi/feeder +pkg_feeder_commit = master + +PACKAGES += find_crate +pkg_find_crate_name = find_crate +pkg_find_crate_description = Find Rust libs and exes in Erlang application priv directory +pkg_find_crate_homepage = https://github.com/goertzenator/find_crate +pkg_find_crate_fetch = git +pkg_find_crate_repo = https://github.com/goertzenator/find_crate +pkg_find_crate_commit = master + +PACKAGES += fix +pkg_fix_name = fix +pkg_fix_description = http://fixprotocol.org/ implementation. +pkg_fix_homepage = https://github.com/maxlapshin/fix +pkg_fix_fetch = git +pkg_fix_repo = https://github.com/maxlapshin/fix +pkg_fix_commit = master + +PACKAGES += flower +pkg_flower_name = flower +pkg_flower_description = FlowER - a Erlang OpenFlow development platform +pkg_flower_homepage = https://github.com/travelping/flower +pkg_flower_fetch = git +pkg_flower_repo = https://github.com/travelping/flower +pkg_flower_commit = master + +PACKAGES += fn +pkg_fn_name = fn +pkg_fn_description = Function utilities for Erlang +pkg_fn_homepage = https://github.com/reiddraper/fn +pkg_fn_fetch = git +pkg_fn_repo = https://github.com/reiddraper/fn +pkg_fn_commit = master + +PACKAGES += folsom +pkg_folsom_name = folsom +pkg_folsom_description = Expose Erlang Events and Metrics +pkg_folsom_homepage = https://github.com/boundary/folsom +pkg_folsom_fetch = git +pkg_folsom_repo = https://github.com/boundary/folsom +pkg_folsom_commit = master + +PACKAGES += folsom_cowboy +pkg_folsom_cowboy_name = folsom_cowboy +pkg_folsom_cowboy_description = A Cowboy based Folsom HTTP Wrapper. +pkg_folsom_cowboy_homepage = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_fetch = git +pkg_folsom_cowboy_repo = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_commit = master + +PACKAGES += folsomite +pkg_folsomite_name = folsomite +pkg_folsomite_description = blow up your graphite / riemann server with folsom metrics +pkg_folsomite_homepage = https://github.com/campanja/folsomite +pkg_folsomite_fetch = git +pkg_folsomite_repo = https://github.com/campanja/folsomite +pkg_folsomite_commit = master + +PACKAGES += fs +pkg_fs_name = fs +pkg_fs_description = Erlang FileSystem Listener +pkg_fs_homepage = https://github.com/synrc/fs +pkg_fs_fetch = git +pkg_fs_repo = https://github.com/synrc/fs +pkg_fs_commit = master + +PACKAGES += fuse +pkg_fuse_name = fuse +pkg_fuse_description = A Circuit Breaker for Erlang +pkg_fuse_homepage = https://github.com/jlouis/fuse +pkg_fuse_fetch = git +pkg_fuse_repo = https://github.com/jlouis/fuse +pkg_fuse_commit = master + +PACKAGES += gcm +pkg_gcm_name = gcm +pkg_gcm_description = An Erlang application for Google Cloud Messaging +pkg_gcm_homepage = https://github.com/pdincau/gcm-erlang +pkg_gcm_fetch = git +pkg_gcm_repo = https://github.com/pdincau/gcm-erlang +pkg_gcm_commit = master + +PACKAGES += gcprof +pkg_gcprof_name = gcprof +pkg_gcprof_description = Garbage Collection profiler for Erlang +pkg_gcprof_homepage = https://github.com/knutin/gcprof +pkg_gcprof_fetch = git +pkg_gcprof_repo = https://github.com/knutin/gcprof +pkg_gcprof_commit = master + +PACKAGES += geas +pkg_geas_name = geas +pkg_geas_description = Guess Erlang Application Scattering +pkg_geas_homepage = https://github.com/crownedgrouse/geas +pkg_geas_fetch = git +pkg_geas_repo = https://github.com/crownedgrouse/geas +pkg_geas_commit = master + +PACKAGES += geef +pkg_geef_name = geef +pkg_geef_description = Git NEEEEF (Erlang NIF) +pkg_geef_homepage = https://github.com/carlosmn/geef +pkg_geef_fetch = git +pkg_geef_repo = https://github.com/carlosmn/geef +pkg_geef_commit = master + +PACKAGES += gen_coap +pkg_gen_coap_name = gen_coap +pkg_gen_coap_description = Generic Erlang CoAP Client/Server +pkg_gen_coap_homepage = https://github.com/gotthardp/gen_coap +pkg_gen_coap_fetch = git +pkg_gen_coap_repo = https://github.com/gotthardp/gen_coap +pkg_gen_coap_commit = master + +PACKAGES += gen_cycle +pkg_gen_cycle_name = gen_cycle +pkg_gen_cycle_description = Simple, generic OTP behaviour for recurring tasks +pkg_gen_cycle_homepage = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_fetch = git +pkg_gen_cycle_repo = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_commit = develop + +PACKAGES += gen_icmp +pkg_gen_icmp_name = gen_icmp +pkg_gen_icmp_description = Erlang interface to ICMP sockets +pkg_gen_icmp_homepage = https://github.com/msantos/gen_icmp +pkg_gen_icmp_fetch = git +pkg_gen_icmp_repo = https://github.com/msantos/gen_icmp +pkg_gen_icmp_commit = master + +PACKAGES += gen_nb_server +pkg_gen_nb_server_name = gen_nb_server +pkg_gen_nb_server_description = OTP behavior for writing non-blocking servers +pkg_gen_nb_server_homepage = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_fetch = git +pkg_gen_nb_server_repo = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_commit = master + +PACKAGES += gen_paxos +pkg_gen_paxos_name = gen_paxos +pkg_gen_paxos_description = An Erlang/OTP-style implementation of the PAXOS distributed consensus protocol +pkg_gen_paxos_homepage = https://github.com/gburd/gen_paxos +pkg_gen_paxos_fetch = git +pkg_gen_paxos_repo = https://github.com/gburd/gen_paxos +pkg_gen_paxos_commit = master + +PACKAGES += gen_smtp +pkg_gen_smtp_name = gen_smtp +pkg_gen_smtp_description = A generic Erlang SMTP server and client that can be extended via callback modules +pkg_gen_smtp_homepage = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_fetch = git +pkg_gen_smtp_repo = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_commit = master + +PACKAGES += gen_tracker +pkg_gen_tracker_name = gen_tracker +pkg_gen_tracker_description = supervisor with ets handling of children and their metadata +pkg_gen_tracker_homepage = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_fetch = git +pkg_gen_tracker_repo = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_commit = master + +PACKAGES += gen_unix +pkg_gen_unix_name = gen_unix +pkg_gen_unix_description = Erlang Unix socket interface +pkg_gen_unix_homepage = https://github.com/msantos/gen_unix +pkg_gen_unix_fetch = git +pkg_gen_unix_repo = https://github.com/msantos/gen_unix +pkg_gen_unix_commit = master + +PACKAGES += geode +pkg_geode_name = geode +pkg_geode_description = geohash/proximity lookup in pure, uncut erlang. +pkg_geode_homepage = https://github.com/bradfordw/geode +pkg_geode_fetch = git +pkg_geode_repo = https://github.com/bradfordw/geode +pkg_geode_commit = master + +PACKAGES += getopt +pkg_getopt_name = getopt +pkg_getopt_description = Module to parse command line arguments using the GNU getopt syntax +pkg_getopt_homepage = https://github.com/jcomellas/getopt +pkg_getopt_fetch = git +pkg_getopt_repo = https://github.com/jcomellas/getopt +pkg_getopt_commit = master + +PACKAGES += gettext +pkg_gettext_name = gettext +pkg_gettext_description = Erlang internationalization library. +pkg_gettext_homepage = https://github.com/etnt/gettext +pkg_gettext_fetch = git +pkg_gettext_repo = https://github.com/etnt/gettext +pkg_gettext_commit = master + +PACKAGES += giallo +pkg_giallo_name = giallo +pkg_giallo_description = Small and flexible web framework on top of Cowboy +pkg_giallo_homepage = https://github.com/kivra/giallo +pkg_giallo_fetch = git +pkg_giallo_repo = https://github.com/kivra/giallo +pkg_giallo_commit = master + +PACKAGES += gin +pkg_gin_name = gin +pkg_gin_description = The guards and for Erlang parse_transform +pkg_gin_homepage = https://github.com/mad-cocktail/gin +pkg_gin_fetch = git +pkg_gin_repo = https://github.com/mad-cocktail/gin +pkg_gin_commit = master + +PACKAGES += gitty +pkg_gitty_name = gitty +pkg_gitty_description = Git access in erlang +pkg_gitty_homepage = https://github.com/maxlapshin/gitty +pkg_gitty_fetch = git +pkg_gitty_repo = https://github.com/maxlapshin/gitty +pkg_gitty_commit = master + +PACKAGES += gold_fever +pkg_gold_fever_name = gold_fever +pkg_gold_fever_description = A Treasure Hunt for Erlangers +pkg_gold_fever_homepage = https://github.com/inaka/gold_fever +pkg_gold_fever_fetch = git +pkg_gold_fever_repo = https://github.com/inaka/gold_fever +pkg_gold_fever_commit = master + +PACKAGES += gpb +pkg_gpb_name = gpb +pkg_gpb_description = A Google Protobuf implementation for Erlang +pkg_gpb_homepage = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_fetch = git +pkg_gpb_repo = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_commit = master + +PACKAGES += gproc +pkg_gproc_name = gproc +pkg_gproc_description = Extended process registry for Erlang +pkg_gproc_homepage = https://github.com/uwiger/gproc +pkg_gproc_fetch = git +pkg_gproc_repo = https://github.com/uwiger/gproc +pkg_gproc_commit = master + +PACKAGES += grapherl +pkg_grapherl_name = grapherl +pkg_grapherl_description = Create graphs of Erlang systems and programs +pkg_grapherl_homepage = https://github.com/eproxus/grapherl +pkg_grapherl_fetch = git +pkg_grapherl_repo = https://github.com/eproxus/grapherl +pkg_grapherl_commit = master + +PACKAGES += grpc +pkg_grpc_name = grpc +pkg_grpc_description = gRPC server in Erlang +pkg_grpc_homepage = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_fetch = git +pkg_grpc_repo = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_commit = master + +PACKAGES += grpc_client +pkg_grpc_client_name = grpc_client +pkg_grpc_client_description = gRPC client in Erlang +pkg_grpc_client_homepage = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_fetch = git +pkg_grpc_client_repo = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_commit = master + +PACKAGES += gun +pkg_gun_name = gun +pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang. +pkg_gun_homepage = http//ninenines.eu +pkg_gun_fetch = git +pkg_gun_repo = https://github.com/ninenines/gun +pkg_gun_commit = master + +PACKAGES += gut +pkg_gut_name = gut +pkg_gut_description = gut is a template printing, aka scaffolding, tool for Erlang. Like rails generate or yeoman +pkg_gut_homepage = https://github.com/unbalancedparentheses/gut +pkg_gut_fetch = git +pkg_gut_repo = https://github.com/unbalancedparentheses/gut +pkg_gut_commit = master + +PACKAGES += hackney +pkg_hackney_name = hackney +pkg_hackney_description = simple HTTP client in Erlang +pkg_hackney_homepage = https://github.com/benoitc/hackney +pkg_hackney_fetch = git +pkg_hackney_repo = https://github.com/benoitc/hackney +pkg_hackney_commit = master + +PACKAGES += hamcrest +pkg_hamcrest_name = hamcrest +pkg_hamcrest_description = Erlang port of Hamcrest +pkg_hamcrest_homepage = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_fetch = git +pkg_hamcrest_repo = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_commit = master + +PACKAGES += hanoidb +pkg_hanoidb_name = hanoidb +pkg_hanoidb_description = Erlang LSM BTree Storage +pkg_hanoidb_homepage = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_fetch = git +pkg_hanoidb_repo = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_commit = master + +PACKAGES += hottub +pkg_hottub_name = hottub +pkg_hottub_description = Permanent Erlang Worker Pool +pkg_hottub_homepage = https://github.com/bfrog/hottub +pkg_hottub_fetch = git +pkg_hottub_repo = https://github.com/bfrog/hottub +pkg_hottub_commit = master + +PACKAGES += hpack +pkg_hpack_name = hpack +pkg_hpack_description = HPACK Implementation for Erlang +pkg_hpack_homepage = https://github.com/joedevivo/hpack +pkg_hpack_fetch = git +pkg_hpack_repo = https://github.com/joedevivo/hpack +pkg_hpack_commit = master + +PACKAGES += hyper +pkg_hyper_name = hyper +pkg_hyper_description = Erlang implementation of HyperLogLog +pkg_hyper_homepage = https://github.com/GameAnalytics/hyper +pkg_hyper_fetch = git +pkg_hyper_repo = https://github.com/GameAnalytics/hyper +pkg_hyper_commit = master + +PACKAGES += i18n +pkg_i18n_name = i18n +pkg_i18n_description = International components for unicode from Erlang (unicode, date, string, number, format, locale, localization, transliteration, icu4e) +pkg_i18n_homepage = https://github.com/erlang-unicode/i18n +pkg_i18n_fetch = git +pkg_i18n_repo = https://github.com/erlang-unicode/i18n +pkg_i18n_commit = master + +PACKAGES += ibrowse +pkg_ibrowse_name = ibrowse +pkg_ibrowse_description = Erlang HTTP client +pkg_ibrowse_homepage = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_fetch = git +pkg_ibrowse_repo = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_commit = master + +PACKAGES += idna +pkg_idna_name = idna +pkg_idna_description = Erlang IDNA lib +pkg_idna_homepage = https://github.com/benoitc/erlang-idna +pkg_idna_fetch = git +pkg_idna_repo = https://github.com/benoitc/erlang-idna +pkg_idna_commit = master + +PACKAGES += ierlang +pkg_ierlang_name = ierlang +pkg_ierlang_description = An Erlang language kernel for IPython. +pkg_ierlang_homepage = https://github.com/robbielynch/ierlang +pkg_ierlang_fetch = git +pkg_ierlang_repo = https://github.com/robbielynch/ierlang +pkg_ierlang_commit = master + +PACKAGES += iota +pkg_iota_name = iota +pkg_iota_description = iota (Inter-dependency Objective Testing Apparatus) - a tool to enforce clean separation of responsibilities in Erlang code +pkg_iota_homepage = https://github.com/jpgneves/iota +pkg_iota_fetch = git +pkg_iota_repo = https://github.com/jpgneves/iota +pkg_iota_commit = master + +PACKAGES += irc_lib +pkg_irc_lib_name = irc_lib +pkg_irc_lib_description = Erlang irc client library +pkg_irc_lib_homepage = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_fetch = git +pkg_irc_lib_repo = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_commit = master + +PACKAGES += ircd +pkg_ircd_name = ircd +pkg_ircd_description = A pluggable IRC daemon application/library for Erlang. +pkg_ircd_homepage = https://github.com/tonyg/erlang-ircd +pkg_ircd_fetch = git +pkg_ircd_repo = https://github.com/tonyg/erlang-ircd +pkg_ircd_commit = master + +PACKAGES += iris +pkg_iris_name = iris +pkg_iris_description = Iris Erlang binding +pkg_iris_homepage = https://github.com/project-iris/iris-erl +pkg_iris_fetch = git +pkg_iris_repo = https://github.com/project-iris/iris-erl +pkg_iris_commit = master + +PACKAGES += iso8601 +pkg_iso8601_name = iso8601 +pkg_iso8601_description = Erlang ISO 8601 date formatter/parser +pkg_iso8601_homepage = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_fetch = git +pkg_iso8601_repo = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_commit = master + +PACKAGES += jamdb_sybase +pkg_jamdb_sybase_name = jamdb_sybase +pkg_jamdb_sybase_description = Erlang driver for SAP Sybase ASE +pkg_jamdb_sybase_homepage = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_fetch = git +pkg_jamdb_sybase_repo = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_commit = master + +PACKAGES += jerg +pkg_jerg_name = jerg +pkg_jerg_description = JSON Schema to Erlang Records Generator +pkg_jerg_homepage = https://github.com/ddossot/jerg +pkg_jerg_fetch = git +pkg_jerg_repo = https://github.com/ddossot/jerg +pkg_jerg_commit = master + +PACKAGES += jesse +pkg_jesse_name = jesse +pkg_jesse_description = jesse (JSon Schema Erlang) is an implementation of a json schema validator for Erlang. +pkg_jesse_homepage = https://github.com/for-GET/jesse +pkg_jesse_fetch = git +pkg_jesse_repo = https://github.com/for-GET/jesse +pkg_jesse_commit = master + +PACKAGES += jiffy +pkg_jiffy_name = jiffy +pkg_jiffy_description = JSON NIFs for Erlang. +pkg_jiffy_homepage = https://github.com/davisp/jiffy +pkg_jiffy_fetch = git +pkg_jiffy_repo = https://github.com/davisp/jiffy +pkg_jiffy_commit = master + +PACKAGES += jiffy_v +pkg_jiffy_v_name = jiffy_v +pkg_jiffy_v_description = JSON validation utility +pkg_jiffy_v_homepage = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_fetch = git +pkg_jiffy_v_repo = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_commit = master + +PACKAGES += jobs +pkg_jobs_name = jobs +pkg_jobs_description = a Job scheduler for load regulation +pkg_jobs_homepage = https://github.com/esl/jobs +pkg_jobs_fetch = git +pkg_jobs_repo = https://github.com/esl/jobs +pkg_jobs_commit = master + +PACKAGES += joxa +pkg_joxa_name = joxa +pkg_joxa_description = A Modern Lisp for the Erlang VM +pkg_joxa_homepage = https://github.com/joxa/joxa +pkg_joxa_fetch = git +pkg_joxa_repo = https://github.com/joxa/joxa +pkg_joxa_commit = master + +PACKAGES += json +pkg_json_name = json +pkg_json_description = a high level json library for erlang (17.0+) +pkg_json_homepage = https://github.com/talentdeficit/json +pkg_json_fetch = git +pkg_json_repo = https://github.com/talentdeficit/json +pkg_json_commit = master + +PACKAGES += json_rec +pkg_json_rec_name = json_rec +pkg_json_rec_description = JSON to erlang record +pkg_json_rec_homepage = https://github.com/justinkirby/json_rec +pkg_json_rec_fetch = git +pkg_json_rec_repo = https://github.com/justinkirby/json_rec +pkg_json_rec_commit = master + +PACKAGES += jsone +pkg_jsone_name = jsone +pkg_jsone_description = An Erlang library for encoding, decoding JSON data. +pkg_jsone_homepage = https://github.com/sile/jsone.git +pkg_jsone_fetch = git +pkg_jsone_repo = https://github.com/sile/jsone.git +pkg_jsone_commit = master + +PACKAGES += jsonerl +pkg_jsonerl_name = jsonerl +pkg_jsonerl_description = yet another but slightly different erlang <-> json encoder/decoder +pkg_jsonerl_homepage = https://github.com/lambder/jsonerl +pkg_jsonerl_fetch = git +pkg_jsonerl_repo = https://github.com/lambder/jsonerl +pkg_jsonerl_commit = master + +PACKAGES += jsonpath +pkg_jsonpath_name = jsonpath +pkg_jsonpath_description = Fast Erlang JSON data retrieval and updates via javascript-like notation +pkg_jsonpath_homepage = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_fetch = git +pkg_jsonpath_repo = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_commit = master + +PACKAGES += jsonx +pkg_jsonx_name = jsonx +pkg_jsonx_description = JSONX is an Erlang library for efficient decode and encode JSON, written in C. +pkg_jsonx_homepage = https://github.com/iskra/jsonx +pkg_jsonx_fetch = git +pkg_jsonx_repo = https://github.com/iskra/jsonx +pkg_jsonx_commit = master + +PACKAGES += jsx +pkg_jsx_name = jsx +pkg_jsx_description = An Erlang application for consuming, producing and manipulating JSON. +pkg_jsx_homepage = https://github.com/talentdeficit/jsx +pkg_jsx_fetch = git +pkg_jsx_repo = https://github.com/talentdeficit/jsx +pkg_jsx_commit = master + +PACKAGES += kafka +pkg_kafka_name = kafka +pkg_kafka_description = Kafka consumer and producer in Erlang +pkg_kafka_homepage = https://github.com/wooga/kafka-erlang +pkg_kafka_fetch = git +pkg_kafka_repo = https://github.com/wooga/kafka-erlang +pkg_kafka_commit = master + +PACKAGES += kafka_protocol +pkg_kafka_protocol_name = kafka_protocol +pkg_kafka_protocol_description = Kafka protocol Erlang library +pkg_kafka_protocol_homepage = https://github.com/klarna/kafka_protocol +pkg_kafka_protocol_fetch = git +pkg_kafka_protocol_repo = https://github.com/klarna/kafka_protocol.git +pkg_kafka_protocol_commit = master + +PACKAGES += kai +pkg_kai_name = kai +pkg_kai_description = DHT storage by Takeshi Inoue +pkg_kai_homepage = https://github.com/synrc/kai +pkg_kai_fetch = git +pkg_kai_repo = https://github.com/synrc/kai +pkg_kai_commit = master + +PACKAGES += katja +pkg_katja_name = katja +pkg_katja_description = A simple Riemann client written in Erlang. +pkg_katja_homepage = https://github.com/nifoc/katja +pkg_katja_fetch = git +pkg_katja_repo = https://github.com/nifoc/katja +pkg_katja_commit = master + +PACKAGES += kdht +pkg_kdht_name = kdht +pkg_kdht_description = kdht is an erlang DHT implementation +pkg_kdht_homepage = https://github.com/kevinlynx/kdht +pkg_kdht_fetch = git +pkg_kdht_repo = https://github.com/kevinlynx/kdht +pkg_kdht_commit = master + +PACKAGES += key2value +pkg_key2value_name = key2value +pkg_key2value_description = Erlang 2-way map +pkg_key2value_homepage = https://github.com/okeuday/key2value +pkg_key2value_fetch = git +pkg_key2value_repo = https://github.com/okeuday/key2value +pkg_key2value_commit = master + +PACKAGES += keys1value +pkg_keys1value_name = keys1value +pkg_keys1value_description = Erlang set associative map for key lists +pkg_keys1value_homepage = https://github.com/okeuday/keys1value +pkg_keys1value_fetch = git +pkg_keys1value_repo = https://github.com/okeuday/keys1value +pkg_keys1value_commit = master + +PACKAGES += kinetic +pkg_kinetic_name = kinetic +pkg_kinetic_description = Erlang Kinesis Client +pkg_kinetic_homepage = https://github.com/AdRoll/kinetic +pkg_kinetic_fetch = git +pkg_kinetic_repo = https://github.com/AdRoll/kinetic +pkg_kinetic_commit = master + +PACKAGES += kjell +pkg_kjell_name = kjell +pkg_kjell_description = Erlang Shell +pkg_kjell_homepage = https://github.com/karlll/kjell +pkg_kjell_fetch = git +pkg_kjell_repo = https://github.com/karlll/kjell +pkg_kjell_commit = master + +PACKAGES += kraken +pkg_kraken_name = kraken +pkg_kraken_description = Distributed Pubsub Server for Realtime Apps +pkg_kraken_homepage = https://github.com/Asana/kraken +pkg_kraken_fetch = git +pkg_kraken_repo = https://github.com/Asana/kraken +pkg_kraken_commit = master + +PACKAGES += kucumberl +pkg_kucumberl_name = kucumberl +pkg_kucumberl_description = A pure-erlang, open-source, implementation of Cucumber +pkg_kucumberl_homepage = https://github.com/openshine/kucumberl +pkg_kucumberl_fetch = git +pkg_kucumberl_repo = https://github.com/openshine/kucumberl +pkg_kucumberl_commit = master + +PACKAGES += kvc +pkg_kvc_name = kvc +pkg_kvc_description = KVC - Key Value Coding for Erlang data structures +pkg_kvc_homepage = https://github.com/etrepum/kvc +pkg_kvc_fetch = git +pkg_kvc_repo = https://github.com/etrepum/kvc +pkg_kvc_commit = master + +PACKAGES += kvlists +pkg_kvlists_name = kvlists +pkg_kvlists_description = Lists of key-value pairs (decoded JSON) in Erlang +pkg_kvlists_homepage = https://github.com/jcomellas/kvlists +pkg_kvlists_fetch = git +pkg_kvlists_repo = https://github.com/jcomellas/kvlists +pkg_kvlists_commit = master + +PACKAGES += kvs +pkg_kvs_name = kvs +pkg_kvs_description = Container and Iterator +pkg_kvs_homepage = https://github.com/synrc/kvs +pkg_kvs_fetch = git +pkg_kvs_repo = https://github.com/synrc/kvs +pkg_kvs_commit = master + +PACKAGES += lager +pkg_lager_name = lager +pkg_lager_description = A logging framework for Erlang/OTP. +pkg_lager_homepage = https://github.com/erlang-lager/lager +pkg_lager_fetch = git +pkg_lager_repo = https://github.com/erlang-lager/lager +pkg_lager_commit = master + +PACKAGES += lager_amqp_backend +pkg_lager_amqp_backend_name = lager_amqp_backend +pkg_lager_amqp_backend_description = AMQP RabbitMQ Lager backend +pkg_lager_amqp_backend_homepage = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_fetch = git +pkg_lager_amqp_backend_repo = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_commit = master + +PACKAGES += lager_syslog +pkg_lager_syslog_name = lager_syslog +pkg_lager_syslog_description = Syslog backend for lager +pkg_lager_syslog_homepage = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_fetch = git +pkg_lager_syslog_repo = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_commit = master + +PACKAGES += lambdapad +pkg_lambdapad_name = lambdapad +pkg_lambdapad_description = Static site generator using Erlang. Yes, Erlang. +pkg_lambdapad_homepage = https://github.com/gar1t/lambdapad +pkg_lambdapad_fetch = git +pkg_lambdapad_repo = https://github.com/gar1t/lambdapad +pkg_lambdapad_commit = master + +PACKAGES += lasp +pkg_lasp_name = lasp +pkg_lasp_description = A Language for Distributed, Eventually Consistent Computations +pkg_lasp_homepage = http://lasp-lang.org/ +pkg_lasp_fetch = git +pkg_lasp_repo = https://github.com/lasp-lang/lasp +pkg_lasp_commit = master + +PACKAGES += lasse +pkg_lasse_name = lasse +pkg_lasse_description = SSE handler for Cowboy +pkg_lasse_homepage = https://github.com/inaka/lasse +pkg_lasse_fetch = git +pkg_lasse_repo = https://github.com/inaka/lasse +pkg_lasse_commit = master + +PACKAGES += ldap +pkg_ldap_name = ldap +pkg_ldap_description = LDAP server written in Erlang +pkg_ldap_homepage = https://github.com/spawnproc/ldap +pkg_ldap_fetch = git +pkg_ldap_repo = https://github.com/spawnproc/ldap +pkg_ldap_commit = master + +PACKAGES += lethink +pkg_lethink_name = lethink +pkg_lethink_description = erlang driver for rethinkdb +pkg_lethink_homepage = https://github.com/taybin/lethink +pkg_lethink_fetch = git +pkg_lethink_repo = https://github.com/taybin/lethink +pkg_lethink_commit = master + +PACKAGES += lfe +pkg_lfe_name = lfe +pkg_lfe_description = Lisp Flavoured Erlang (LFE) +pkg_lfe_homepage = https://github.com/rvirding/lfe +pkg_lfe_fetch = git +pkg_lfe_repo = https://github.com/rvirding/lfe +pkg_lfe_commit = master + +PACKAGES += ling +pkg_ling_name = ling +pkg_ling_description = Erlang on Xen +pkg_ling_homepage = https://github.com/cloudozer/ling +pkg_ling_fetch = git +pkg_ling_repo = https://github.com/cloudozer/ling +pkg_ling_commit = master + +PACKAGES += live +pkg_live_name = live +pkg_live_description = Automated module and configuration reloader. +pkg_live_homepage = http://ninenines.eu +pkg_live_fetch = git +pkg_live_repo = https://github.com/ninenines/live +pkg_live_commit = master + +PACKAGES += lmq +pkg_lmq_name = lmq +pkg_lmq_description = Lightweight Message Queue +pkg_lmq_homepage = https://github.com/iij/lmq +pkg_lmq_fetch = git +pkg_lmq_repo = https://github.com/iij/lmq +pkg_lmq_commit = master + +PACKAGES += locker +pkg_locker_name = locker +pkg_locker_description = Atomic distributed 'check and set' for short-lived keys +pkg_locker_homepage = https://github.com/wooga/locker +pkg_locker_fetch = git +pkg_locker_repo = https://github.com/wooga/locker +pkg_locker_commit = master + +PACKAGES += locks +pkg_locks_name = locks +pkg_locks_description = A scalable, deadlock-resolving resource locker +pkg_locks_homepage = https://github.com/uwiger/locks +pkg_locks_fetch = git +pkg_locks_repo = https://github.com/uwiger/locks +pkg_locks_commit = master + +PACKAGES += log4erl +pkg_log4erl_name = log4erl +pkg_log4erl_description = A logger for erlang in the spirit of Log4J. +pkg_log4erl_homepage = https://github.com/ahmednawras/log4erl +pkg_log4erl_fetch = git +pkg_log4erl_repo = https://github.com/ahmednawras/log4erl +pkg_log4erl_commit = master + +PACKAGES += lol +pkg_lol_name = lol +pkg_lol_description = Lisp on erLang, and programming is fun again +pkg_lol_homepage = https://github.com/b0oh/lol +pkg_lol_fetch = git +pkg_lol_repo = https://github.com/b0oh/lol +pkg_lol_commit = master + +PACKAGES += lucid +pkg_lucid_name = lucid +pkg_lucid_description = HTTP/2 server written in Erlang +pkg_lucid_homepage = https://github.com/tatsuhiro-t/lucid +pkg_lucid_fetch = git +pkg_lucid_repo = https://github.com/tatsuhiro-t/lucid +pkg_lucid_commit = master + +PACKAGES += luerl +pkg_luerl_name = luerl +pkg_luerl_description = Lua in Erlang +pkg_luerl_homepage = https://github.com/rvirding/luerl +pkg_luerl_fetch = git +pkg_luerl_repo = https://github.com/rvirding/luerl +pkg_luerl_commit = develop + +PACKAGES += luwak +pkg_luwak_name = luwak +pkg_luwak_description = Large-object storage interface for Riak +pkg_luwak_homepage = https://github.com/basho/luwak +pkg_luwak_fetch = git +pkg_luwak_repo = https://github.com/basho/luwak +pkg_luwak_commit = master + +PACKAGES += lux +pkg_lux_name = lux +pkg_lux_description = Lux (LUcid eXpect scripting) simplifies test automation and provides an Expect-style execution of commands +pkg_lux_homepage = https://github.com/hawk/lux +pkg_lux_fetch = git +pkg_lux_repo = https://github.com/hawk/lux +pkg_lux_commit = master + +PACKAGES += machi +pkg_machi_name = machi +pkg_machi_description = Machi file store +pkg_machi_homepage = https://github.com/basho/machi +pkg_machi_fetch = git +pkg_machi_repo = https://github.com/basho/machi +pkg_machi_commit = master + +PACKAGES += mad +pkg_mad_name = mad +pkg_mad_description = Small and Fast Rebar Replacement +pkg_mad_homepage = https://github.com/synrc/mad +pkg_mad_fetch = git +pkg_mad_repo = https://github.com/synrc/mad +pkg_mad_commit = master + +PACKAGES += marina +pkg_marina_name = marina +pkg_marina_description = Non-blocking Erlang Cassandra CQL3 client +pkg_marina_homepage = https://github.com/lpgauth/marina +pkg_marina_fetch = git +pkg_marina_repo = https://github.com/lpgauth/marina +pkg_marina_commit = master + +PACKAGES += mavg +pkg_mavg_name = mavg +pkg_mavg_description = Erlang :: Exponential moving average library +pkg_mavg_homepage = https://github.com/EchoTeam/mavg +pkg_mavg_fetch = git +pkg_mavg_repo = https://github.com/EchoTeam/mavg +pkg_mavg_commit = master + +PACKAGES += mc_erl +pkg_mc_erl_name = mc_erl +pkg_mc_erl_description = mc-erl is a server for Minecraft 1.4.7 written in Erlang. +pkg_mc_erl_homepage = https://github.com/clonejo/mc-erl +pkg_mc_erl_fetch = git +pkg_mc_erl_repo = https://github.com/clonejo/mc-erl +pkg_mc_erl_commit = master + +PACKAGES += mcd +pkg_mcd_name = mcd +pkg_mcd_description = Fast memcached protocol client in pure Erlang +pkg_mcd_homepage = https://github.com/EchoTeam/mcd +pkg_mcd_fetch = git +pkg_mcd_repo = https://github.com/EchoTeam/mcd +pkg_mcd_commit = master + +PACKAGES += mcerlang +pkg_mcerlang_name = mcerlang +pkg_mcerlang_description = The McErlang model checker for Erlang +pkg_mcerlang_homepage = https://github.com/fredlund/McErlang +pkg_mcerlang_fetch = git +pkg_mcerlang_repo = https://github.com/fredlund/McErlang +pkg_mcerlang_commit = master + +PACKAGES += meck +pkg_meck_name = meck +pkg_meck_description = A mocking library for Erlang +pkg_meck_homepage = https://github.com/eproxus/meck +pkg_meck_fetch = git +pkg_meck_repo = https://github.com/eproxus/meck +pkg_meck_commit = master + +PACKAGES += mekao +pkg_mekao_name = mekao +pkg_mekao_description = SQL constructor +pkg_mekao_homepage = https://github.com/ddosia/mekao +pkg_mekao_fetch = git +pkg_mekao_repo = https://github.com/ddosia/mekao +pkg_mekao_commit = master + +PACKAGES += memo +pkg_memo_name = memo +pkg_memo_description = Erlang memoization server +pkg_memo_homepage = https://github.com/tuncer/memo +pkg_memo_fetch = git +pkg_memo_repo = https://github.com/tuncer/memo +pkg_memo_commit = master + +PACKAGES += merge_index +pkg_merge_index_name = merge_index +pkg_merge_index_description = MergeIndex is an Erlang library for storing ordered sets on disk. It is very similar to an SSTable (in Google's Bigtable) or an HFile (in Hadoop). +pkg_merge_index_homepage = https://github.com/basho/merge_index +pkg_merge_index_fetch = git +pkg_merge_index_repo = https://github.com/basho/merge_index +pkg_merge_index_commit = master + +PACKAGES += merl +pkg_merl_name = merl +pkg_merl_description = Metaprogramming in Erlang +pkg_merl_homepage = https://github.com/richcarl/merl +pkg_merl_fetch = git +pkg_merl_repo = https://github.com/richcarl/merl +pkg_merl_commit = master + +PACKAGES += mimerl +pkg_mimerl_name = mimerl +pkg_mimerl_description = library to handle mimetypes +pkg_mimerl_homepage = https://github.com/benoitc/mimerl +pkg_mimerl_fetch = git +pkg_mimerl_repo = https://github.com/benoitc/mimerl +pkg_mimerl_commit = master + +PACKAGES += mimetypes +pkg_mimetypes_name = mimetypes +pkg_mimetypes_description = Erlang MIME types library +pkg_mimetypes_homepage = https://github.com/spawngrid/mimetypes +pkg_mimetypes_fetch = git +pkg_mimetypes_repo = https://github.com/spawngrid/mimetypes +pkg_mimetypes_commit = master + +PACKAGES += mixer +pkg_mixer_name = mixer +pkg_mixer_description = Mix in functions from other modules +pkg_mixer_homepage = https://github.com/chef/mixer +pkg_mixer_fetch = git +pkg_mixer_repo = https://github.com/chef/mixer +pkg_mixer_commit = master + +PACKAGES += mochiweb +pkg_mochiweb_name = mochiweb +pkg_mochiweb_description = MochiWeb is an Erlang library for building lightweight HTTP servers. +pkg_mochiweb_homepage = https://github.com/mochi/mochiweb +pkg_mochiweb_fetch = git +pkg_mochiweb_repo = https://github.com/mochi/mochiweb +pkg_mochiweb_commit = master + +PACKAGES += mochiweb_xpath +pkg_mochiweb_xpath_name = mochiweb_xpath +pkg_mochiweb_xpath_description = XPath support for mochiweb's html parser +pkg_mochiweb_xpath_homepage = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_fetch = git +pkg_mochiweb_xpath_repo = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_commit = master + +PACKAGES += mockgyver +pkg_mockgyver_name = mockgyver +pkg_mockgyver_description = A mocking library for Erlang +pkg_mockgyver_homepage = https://github.com/klajo/mockgyver +pkg_mockgyver_fetch = git +pkg_mockgyver_repo = https://github.com/klajo/mockgyver +pkg_mockgyver_commit = master + +PACKAGES += modlib +pkg_modlib_name = modlib +pkg_modlib_description = Web framework based on Erlang's inets httpd +pkg_modlib_homepage = https://github.com/gar1t/modlib +pkg_modlib_fetch = git +pkg_modlib_repo = https://github.com/gar1t/modlib +pkg_modlib_commit = master + +PACKAGES += mongodb +pkg_mongodb_name = mongodb +pkg_mongodb_description = MongoDB driver for Erlang +pkg_mongodb_homepage = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_fetch = git +pkg_mongodb_repo = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_commit = master + +PACKAGES += mongooseim +pkg_mongooseim_name = mongooseim +pkg_mongooseim_description = Jabber / XMPP server with focus on performance and scalability, by Erlang Solutions +pkg_mongooseim_homepage = https://www.erlang-solutions.com/products/mongooseim-massively-scalable-ejabberd-platform +pkg_mongooseim_fetch = git +pkg_mongooseim_repo = https://github.com/esl/MongooseIM +pkg_mongooseim_commit = master + +PACKAGES += moyo +pkg_moyo_name = moyo +pkg_moyo_description = Erlang utility functions library +pkg_moyo_homepage = https://github.com/dwango/moyo +pkg_moyo_fetch = git +pkg_moyo_repo = https://github.com/dwango/moyo +pkg_moyo_commit = master + +PACKAGES += msgpack +pkg_msgpack_name = msgpack +pkg_msgpack_description = MessagePack (de)serializer implementation for Erlang +pkg_msgpack_homepage = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_fetch = git +pkg_msgpack_repo = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_commit = master + +PACKAGES += mu2 +pkg_mu2_name = mu2 +pkg_mu2_description = Erlang mutation testing tool +pkg_mu2_homepage = https://github.com/ramsay-t/mu2 +pkg_mu2_fetch = git +pkg_mu2_repo = https://github.com/ramsay-t/mu2 +pkg_mu2_commit = master + +PACKAGES += mustache +pkg_mustache_name = mustache +pkg_mustache_description = Mustache template engine for Erlang. +pkg_mustache_homepage = https://github.com/mojombo/mustache.erl +pkg_mustache_fetch = git +pkg_mustache_repo = https://github.com/mojombo/mustache.erl +pkg_mustache_commit = master + +PACKAGES += myproto +pkg_myproto_name = myproto +pkg_myproto_description = MySQL Server Protocol in Erlang +pkg_myproto_homepage = https://github.com/altenwald/myproto +pkg_myproto_fetch = git +pkg_myproto_repo = https://github.com/altenwald/myproto +pkg_myproto_commit = master + +PACKAGES += mysql +pkg_mysql_name = mysql +pkg_mysql_description = Erlang MySQL Driver (from code.google.com) +pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_fetch = git +pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_commit = master + +PACKAGES += n2o +pkg_n2o_name = n2o +pkg_n2o_description = WebSocket Application Server +pkg_n2o_homepage = https://github.com/5HT/n2o +pkg_n2o_fetch = git +pkg_n2o_repo = https://github.com/5HT/n2o +pkg_n2o_commit = master + +PACKAGES += nat_upnp +pkg_nat_upnp_name = nat_upnp +pkg_nat_upnp_description = Erlang library to map your internal port to an external using UNP IGD +pkg_nat_upnp_homepage = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_fetch = git +pkg_nat_upnp_repo = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_commit = master + +PACKAGES += neo4j +pkg_neo4j_name = neo4j +pkg_neo4j_description = Erlang client library for Neo4J. +pkg_neo4j_homepage = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_fetch = git +pkg_neo4j_repo = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_commit = master + +PACKAGES += neotoma +pkg_neotoma_name = neotoma +pkg_neotoma_description = Erlang library and packrat parser-generator for parsing expression grammars. +pkg_neotoma_homepage = https://github.com/seancribbs/neotoma +pkg_neotoma_fetch = git +pkg_neotoma_repo = https://github.com/seancribbs/neotoma +pkg_neotoma_commit = master + +PACKAGES += newrelic +pkg_newrelic_name = newrelic +pkg_newrelic_description = Erlang library for sending metrics to New Relic +pkg_newrelic_homepage = https://github.com/wooga/newrelic-erlang +pkg_newrelic_fetch = git +pkg_newrelic_repo = https://github.com/wooga/newrelic-erlang +pkg_newrelic_commit = master + +PACKAGES += nifty +pkg_nifty_name = nifty +pkg_nifty_description = Erlang NIF wrapper generator +pkg_nifty_homepage = https://github.com/parapluu/nifty +pkg_nifty_fetch = git +pkg_nifty_repo = https://github.com/parapluu/nifty +pkg_nifty_commit = master + +PACKAGES += nitrogen_core +pkg_nitrogen_core_name = nitrogen_core +pkg_nitrogen_core_description = The core Nitrogen library. +pkg_nitrogen_core_homepage = http://nitrogenproject.com/ +pkg_nitrogen_core_fetch = git +pkg_nitrogen_core_repo = https://github.com/nitrogen/nitrogen_core +pkg_nitrogen_core_commit = master + +PACKAGES += nkbase +pkg_nkbase_name = nkbase +pkg_nkbase_description = NkBASE distributed database +pkg_nkbase_homepage = https://github.com/Nekso/nkbase +pkg_nkbase_fetch = git +pkg_nkbase_repo = https://github.com/Nekso/nkbase +pkg_nkbase_commit = develop + +PACKAGES += nkdocker +pkg_nkdocker_name = nkdocker +pkg_nkdocker_description = Erlang Docker client +pkg_nkdocker_homepage = https://github.com/Nekso/nkdocker +pkg_nkdocker_fetch = git +pkg_nkdocker_repo = https://github.com/Nekso/nkdocker +pkg_nkdocker_commit = master + +PACKAGES += nkpacket +pkg_nkpacket_name = nkpacket +pkg_nkpacket_description = Generic Erlang transport layer +pkg_nkpacket_homepage = https://github.com/Nekso/nkpacket +pkg_nkpacket_fetch = git +pkg_nkpacket_repo = https://github.com/Nekso/nkpacket +pkg_nkpacket_commit = master + +PACKAGES += nksip +pkg_nksip_name = nksip +pkg_nksip_description = Erlang SIP application server +pkg_nksip_homepage = https://github.com/kalta/nksip +pkg_nksip_fetch = git +pkg_nksip_repo = https://github.com/kalta/nksip +pkg_nksip_commit = master + +PACKAGES += nodefinder +pkg_nodefinder_name = nodefinder +pkg_nodefinder_description = automatic node discovery via UDP multicast +pkg_nodefinder_homepage = https://github.com/erlanger/nodefinder +pkg_nodefinder_fetch = git +pkg_nodefinder_repo = https://github.com/okeuday/nodefinder +pkg_nodefinder_commit = master + +PACKAGES += nprocreg +pkg_nprocreg_name = nprocreg +pkg_nprocreg_description = Minimal Distributed Erlang Process Registry +pkg_nprocreg_homepage = http://nitrogenproject.com/ +pkg_nprocreg_fetch = git +pkg_nprocreg_repo = https://github.com/nitrogen/nprocreg +pkg_nprocreg_commit = master + +PACKAGES += oauth +pkg_oauth_name = oauth +pkg_oauth_description = An Erlang OAuth 1.0 implementation +pkg_oauth_homepage = https://github.com/tim/erlang-oauth +pkg_oauth_fetch = git +pkg_oauth_repo = https://github.com/tim/erlang-oauth +pkg_oauth_commit = master + +PACKAGES += oauth2 +pkg_oauth2_name = oauth2 +pkg_oauth2_description = Erlang Oauth2 implementation +pkg_oauth2_homepage = https://github.com/kivra/oauth2 +pkg_oauth2_fetch = git +pkg_oauth2_repo = https://github.com/kivra/oauth2 +pkg_oauth2_commit = master + +PACKAGES += observer_cli +pkg_observer_cli_name = observer_cli +pkg_observer_cli_description = Visualize Erlang/Elixir Nodes On The Command Line +pkg_observer_cli_homepage = http://zhongwencool.github.io/observer_cli +pkg_observer_cli_fetch = git +pkg_observer_cli_repo = https://github.com/zhongwencool/observer_cli +pkg_observer_cli_commit = master + +PACKAGES += octopus +pkg_octopus_name = octopus +pkg_octopus_description = Small and flexible pool manager written in Erlang +pkg_octopus_homepage = https://github.com/erlangbureau/octopus +pkg_octopus_fetch = git +pkg_octopus_repo = https://github.com/erlangbureau/octopus +pkg_octopus_commit = master + +PACKAGES += of_protocol +pkg_of_protocol_name = of_protocol +pkg_of_protocol_description = OpenFlow Protocol Library for Erlang +pkg_of_protocol_homepage = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_fetch = git +pkg_of_protocol_repo = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_commit = master + +PACKAGES += opencouch +pkg_opencouch_name = couch +pkg_opencouch_description = A embeddable document oriented database compatible with Apache CouchDB +pkg_opencouch_homepage = https://github.com/benoitc/opencouch +pkg_opencouch_fetch = git +pkg_opencouch_repo = https://github.com/benoitc/opencouch +pkg_opencouch_commit = master + +PACKAGES += openflow +pkg_openflow_name = openflow +pkg_openflow_description = An OpenFlow controller written in pure erlang +pkg_openflow_homepage = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_fetch = git +pkg_openflow_repo = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_commit = master + +PACKAGES += openid +pkg_openid_name = openid +pkg_openid_description = Erlang OpenID +pkg_openid_homepage = https://github.com/brendonh/erl_openid +pkg_openid_fetch = git +pkg_openid_repo = https://github.com/brendonh/erl_openid +pkg_openid_commit = master + +PACKAGES += openpoker +pkg_openpoker_name = openpoker +pkg_openpoker_description = Genesis Texas hold'em Game Server +pkg_openpoker_homepage = https://github.com/hpyhacking/openpoker +pkg_openpoker_fetch = git +pkg_openpoker_repo = https://github.com/hpyhacking/openpoker +pkg_openpoker_commit = master + +PACKAGES += otpbp +pkg_otpbp_name = otpbp +pkg_otpbp_description = Parse transformer for use new OTP functions in old Erlang/OTP releases (R15, R16, 17, 18, 19) +pkg_otpbp_homepage = https://github.com/Ledest/otpbp +pkg_otpbp_fetch = git +pkg_otpbp_repo = https://github.com/Ledest/otpbp +pkg_otpbp_commit = master + +PACKAGES += pal +pkg_pal_name = pal +pkg_pal_description = Pragmatic Authentication Library +pkg_pal_homepage = https://github.com/manifest/pal +pkg_pal_fetch = git +pkg_pal_repo = https://github.com/manifest/pal +pkg_pal_commit = master + +PACKAGES += parse_trans +pkg_parse_trans_name = parse_trans +pkg_parse_trans_description = Parse transform utilities for Erlang +pkg_parse_trans_homepage = https://github.com/uwiger/parse_trans +pkg_parse_trans_fetch = git +pkg_parse_trans_repo = https://github.com/uwiger/parse_trans +pkg_parse_trans_commit = master + +PACKAGES += parsexml +pkg_parsexml_name = parsexml +pkg_parsexml_description = Simple DOM XML parser with convenient and very simple API +pkg_parsexml_homepage = https://github.com/maxlapshin/parsexml +pkg_parsexml_fetch = git +pkg_parsexml_repo = https://github.com/maxlapshin/parsexml +pkg_parsexml_commit = master + +PACKAGES += pegjs +pkg_pegjs_name = pegjs +pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. +pkg_pegjs_homepage = https://github.com/dmitriid/pegjs +pkg_pegjs_fetch = git +pkg_pegjs_repo = https://github.com/dmitriid/pegjs +pkg_pegjs_commit = master + +PACKAGES += percept2 +pkg_percept2_name = percept2 +pkg_percept2_description = Concurrent profiling tool for Erlang +pkg_percept2_homepage = https://github.com/huiqing/percept2 +pkg_percept2_fetch = git +pkg_percept2_repo = https://github.com/huiqing/percept2 +pkg_percept2_commit = master + +PACKAGES += pgsql +pkg_pgsql_name = pgsql +pkg_pgsql_description = Erlang PostgreSQL driver +pkg_pgsql_homepage = https://github.com/semiocast/pgsql +pkg_pgsql_fetch = git +pkg_pgsql_repo = https://github.com/semiocast/pgsql +pkg_pgsql_commit = master + +PACKAGES += pkgx +pkg_pkgx_name = pkgx +pkg_pkgx_description = Build .deb packages from Erlang releases +pkg_pkgx_homepage = https://github.com/arjan/pkgx +pkg_pkgx_fetch = git +pkg_pkgx_repo = https://github.com/arjan/pkgx +pkg_pkgx_commit = master + +PACKAGES += pkt +pkg_pkt_name = pkt +pkg_pkt_description = Erlang network protocol library +pkg_pkt_homepage = https://github.com/msantos/pkt +pkg_pkt_fetch = git +pkg_pkt_repo = https://github.com/msantos/pkt +pkg_pkt_commit = master + +PACKAGES += plain_fsm +pkg_plain_fsm_name = plain_fsm +pkg_plain_fsm_description = A behaviour/support library for writing plain Erlang FSMs. +pkg_plain_fsm_homepage = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_fetch = git +pkg_plain_fsm_repo = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_commit = master + +PACKAGES += plumtree +pkg_plumtree_name = plumtree +pkg_plumtree_description = Epidemic Broadcast Trees +pkg_plumtree_homepage = https://github.com/helium/plumtree +pkg_plumtree_fetch = git +pkg_plumtree_repo = https://github.com/helium/plumtree +pkg_plumtree_commit = master + +PACKAGES += pmod_transform +pkg_pmod_transform_name = pmod_transform +pkg_pmod_transform_description = Parse transform for parameterized modules +pkg_pmod_transform_homepage = https://github.com/erlang/pmod_transform +pkg_pmod_transform_fetch = git +pkg_pmod_transform_repo = https://github.com/erlang/pmod_transform +pkg_pmod_transform_commit = master + +PACKAGES += pobox +pkg_pobox_name = pobox +pkg_pobox_description = External buffer processes to protect against mailbox overflow in Erlang +pkg_pobox_homepage = https://github.com/ferd/pobox +pkg_pobox_fetch = git +pkg_pobox_repo = https://github.com/ferd/pobox +pkg_pobox_commit = master + +PACKAGES += ponos +pkg_ponos_name = ponos +pkg_ponos_description = ponos is a simple yet powerful load generator written in erlang +pkg_ponos_homepage = https://github.com/klarna/ponos +pkg_ponos_fetch = git +pkg_ponos_repo = https://github.com/klarna/ponos +pkg_ponos_commit = master + +PACKAGES += poolboy +pkg_poolboy_name = poolboy +pkg_poolboy_description = A hunky Erlang worker pool factory +pkg_poolboy_homepage = https://github.com/devinus/poolboy +pkg_poolboy_fetch = git +pkg_poolboy_repo = https://github.com/devinus/poolboy +pkg_poolboy_commit = master + +PACKAGES += pooler +pkg_pooler_name = pooler +pkg_pooler_description = An OTP Process Pool Application +pkg_pooler_homepage = https://github.com/seth/pooler +pkg_pooler_fetch = git +pkg_pooler_repo = https://github.com/seth/pooler +pkg_pooler_commit = master + +PACKAGES += pqueue +pkg_pqueue_name = pqueue +pkg_pqueue_description = Erlang Priority Queues +pkg_pqueue_homepage = https://github.com/okeuday/pqueue +pkg_pqueue_fetch = git +pkg_pqueue_repo = https://github.com/okeuday/pqueue +pkg_pqueue_commit = master + +PACKAGES += procket +pkg_procket_name = procket +pkg_procket_description = Erlang interface to low level socket operations +pkg_procket_homepage = http://blog.listincomprehension.com/search/label/procket +pkg_procket_fetch = git +pkg_procket_repo = https://github.com/msantos/procket +pkg_procket_commit = master + +PACKAGES += prop +pkg_prop_name = prop +pkg_prop_description = An Erlang code scaffolding and generator system. +pkg_prop_homepage = https://github.com/nuex/prop +pkg_prop_fetch = git +pkg_prop_repo = https://github.com/nuex/prop +pkg_prop_commit = master + +PACKAGES += proper +pkg_proper_name = proper +pkg_proper_description = PropEr: a QuickCheck-inspired property-based testing tool for Erlang. +pkg_proper_homepage = http://proper.softlab.ntua.gr +pkg_proper_fetch = git +pkg_proper_repo = https://github.com/manopapad/proper +pkg_proper_commit = master + +PACKAGES += props +pkg_props_name = props +pkg_props_description = Property structure library +pkg_props_homepage = https://github.com/greyarea/props +pkg_props_fetch = git +pkg_props_repo = https://github.com/greyarea/props +pkg_props_commit = master + +PACKAGES += protobuffs +pkg_protobuffs_name = protobuffs +pkg_protobuffs_description = An implementation of Google's Protocol Buffers for Erlang, based on ngerakines/erlang_protobuffs. +pkg_protobuffs_homepage = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_fetch = git +pkg_protobuffs_repo = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_commit = master + +PACKAGES += psycho +pkg_psycho_name = psycho +pkg_psycho_description = HTTP server that provides a WSGI-like interface for applications and middleware. +pkg_psycho_homepage = https://github.com/gar1t/psycho +pkg_psycho_fetch = git +pkg_psycho_repo = https://github.com/gar1t/psycho +pkg_psycho_commit = master + +PACKAGES += purity +pkg_purity_name = purity +pkg_purity_description = A side-effect analyzer for Erlang +pkg_purity_homepage = https://github.com/mpitid/purity +pkg_purity_fetch = git +pkg_purity_repo = https://github.com/mpitid/purity +pkg_purity_commit = master + +PACKAGES += push_service +pkg_push_service_name = push_service +pkg_push_service_description = Push service +pkg_push_service_homepage = https://github.com/hairyhum/push_service +pkg_push_service_fetch = git +pkg_push_service_repo = https://github.com/hairyhum/push_service +pkg_push_service_commit = master + +PACKAGES += qdate +pkg_qdate_name = qdate +pkg_qdate_description = Date, time, and timezone parsing, formatting, and conversion for Erlang. +pkg_qdate_homepage = https://github.com/choptastic/qdate +pkg_qdate_fetch = git +pkg_qdate_repo = https://github.com/choptastic/qdate +pkg_qdate_commit = master + +PACKAGES += qrcode +pkg_qrcode_name = qrcode +pkg_qrcode_description = QR Code encoder in Erlang +pkg_qrcode_homepage = https://github.com/komone/qrcode +pkg_qrcode_fetch = git +pkg_qrcode_repo = https://github.com/komone/qrcode +pkg_qrcode_commit = master + +PACKAGES += quest +pkg_quest_name = quest +pkg_quest_description = Learn Erlang through this set of challenges. An interactive system for getting to know Erlang. +pkg_quest_homepage = https://github.com/eriksoe/ErlangQuest +pkg_quest_fetch = git +pkg_quest_repo = https://github.com/eriksoe/ErlangQuest +pkg_quest_commit = master + +PACKAGES += quickrand +pkg_quickrand_name = quickrand +pkg_quickrand_description = Quick Erlang Random Number Generation +pkg_quickrand_homepage = https://github.com/okeuday/quickrand +pkg_quickrand_fetch = git +pkg_quickrand_repo = https://github.com/okeuday/quickrand +pkg_quickrand_commit = master + +PACKAGES += rabbit +pkg_rabbit_name = rabbit +pkg_rabbit_description = RabbitMQ Server +pkg_rabbit_homepage = https://www.rabbitmq.com/ +pkg_rabbit_fetch = git +pkg_rabbit_repo = https://github.com/rabbitmq/rabbitmq-server.git +pkg_rabbit_commit = master + +PACKAGES += rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_name = rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_description = Custom RabbitMQ exchange type for sticking messages in Riak +pkg_rabbit_exchange_type_riak_homepage = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_fetch = git +pkg_rabbit_exchange_type_riak_repo = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_commit = master + +PACKAGES += rack +pkg_rack_name = rack +pkg_rack_description = Rack handler for erlang +pkg_rack_homepage = https://github.com/erlyvideo/rack +pkg_rack_fetch = git +pkg_rack_repo = https://github.com/erlyvideo/rack +pkg_rack_commit = master + +PACKAGES += radierl +pkg_radierl_name = radierl +pkg_radierl_description = RADIUS protocol stack implemented in Erlang. +pkg_radierl_homepage = https://github.com/vances/radierl +pkg_radierl_fetch = git +pkg_radierl_repo = https://github.com/vances/radierl +pkg_radierl_commit = master + +PACKAGES += rafter +pkg_rafter_name = rafter +pkg_rafter_description = An Erlang library application which implements the Raft consensus protocol +pkg_rafter_homepage = https://github.com/andrewjstone/rafter +pkg_rafter_fetch = git +pkg_rafter_repo = https://github.com/andrewjstone/rafter +pkg_rafter_commit = master + +PACKAGES += ranch +pkg_ranch_name = ranch +pkg_ranch_description = Socket acceptor pool for TCP protocols. +pkg_ranch_homepage = http://ninenines.eu +pkg_ranch_fetch = git +pkg_ranch_repo = https://github.com/ninenines/ranch +pkg_ranch_commit = 1.2.1 + +PACKAGES += rbeacon +pkg_rbeacon_name = rbeacon +pkg_rbeacon_description = LAN discovery and presence in Erlang. +pkg_rbeacon_homepage = https://github.com/refuge/rbeacon +pkg_rbeacon_fetch = git +pkg_rbeacon_repo = https://github.com/refuge/rbeacon +pkg_rbeacon_commit = master + +PACKAGES += rebar +pkg_rebar_name = rebar +pkg_rebar_description = Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. +pkg_rebar_homepage = http://www.rebar3.org +pkg_rebar_fetch = git +pkg_rebar_repo = https://github.com/rebar/rebar3 +pkg_rebar_commit = master + +PACKAGES += rebus +pkg_rebus_name = rebus +pkg_rebus_description = A stupid simple, internal, pub/sub event bus written in- and for Erlang. +pkg_rebus_homepage = https://github.com/olle/rebus +pkg_rebus_fetch = git +pkg_rebus_repo = https://github.com/olle/rebus +pkg_rebus_commit = master + +PACKAGES += rec2json +pkg_rec2json_name = rec2json +pkg_rec2json_description = Compile erlang record definitions into modules to convert them to/from json easily. +pkg_rec2json_homepage = https://github.com/lordnull/rec2json +pkg_rec2json_fetch = git +pkg_rec2json_repo = https://github.com/lordnull/rec2json +pkg_rec2json_commit = master + +PACKAGES += recon +pkg_recon_name = recon +pkg_recon_description = Collection of functions and scripts to debug Erlang in production. +pkg_recon_homepage = https://github.com/ferd/recon +pkg_recon_fetch = git +pkg_recon_repo = https://github.com/ferd/recon +pkg_recon_commit = master + +PACKAGES += record_info +pkg_record_info_name = record_info +pkg_record_info_description = Convert between record and proplist +pkg_record_info_homepage = https://github.com/bipthelin/erlang-record_info +pkg_record_info_fetch = git +pkg_record_info_repo = https://github.com/bipthelin/erlang-record_info +pkg_record_info_commit = master + +PACKAGES += redgrid +pkg_redgrid_name = redgrid +pkg_redgrid_description = automatic Erlang node discovery via redis +pkg_redgrid_homepage = https://github.com/jkvor/redgrid +pkg_redgrid_fetch = git +pkg_redgrid_repo = https://github.com/jkvor/redgrid +pkg_redgrid_commit = master + +PACKAGES += redo +pkg_redo_name = redo +pkg_redo_description = pipelined erlang redis client +pkg_redo_homepage = https://github.com/jkvor/redo +pkg_redo_fetch = git +pkg_redo_repo = https://github.com/jkvor/redo +pkg_redo_commit = master + +PACKAGES += reload_mk +pkg_reload_mk_name = reload_mk +pkg_reload_mk_description = Live reload plugin for erlang.mk. +pkg_reload_mk_homepage = https://github.com/bullno1/reload.mk +pkg_reload_mk_fetch = git +pkg_reload_mk_repo = https://github.com/bullno1/reload.mk +pkg_reload_mk_commit = master + +PACKAGES += reltool_util +pkg_reltool_util_name = reltool_util +pkg_reltool_util_description = Erlang reltool utility functionality application +pkg_reltool_util_homepage = https://github.com/okeuday/reltool_util +pkg_reltool_util_fetch = git +pkg_reltool_util_repo = https://github.com/okeuday/reltool_util +pkg_reltool_util_commit = master + +PACKAGES += relx +pkg_relx_name = relx +pkg_relx_description = Sane, simple release creation for Erlang +pkg_relx_homepage = https://github.com/erlware/relx +pkg_relx_fetch = git +pkg_relx_repo = https://github.com/erlware/relx +pkg_relx_commit = master + +PACKAGES += resource_discovery +pkg_resource_discovery_name = resource_discovery +pkg_resource_discovery_description = An application used to dynamically discover resources present in an Erlang node cluster. +pkg_resource_discovery_homepage = http://erlware.org/ +pkg_resource_discovery_fetch = git +pkg_resource_discovery_repo = https://github.com/erlware/resource_discovery +pkg_resource_discovery_commit = master + +PACKAGES += restc +pkg_restc_name = restc +pkg_restc_description = Erlang Rest Client +pkg_restc_homepage = https://github.com/kivra/restclient +pkg_restc_fetch = git +pkg_restc_repo = https://github.com/kivra/restclient +pkg_restc_commit = master + +PACKAGES += rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_name = rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_description = Erlang RFC4627 (JSON) codec and JSON-RPC server implementation. +pkg_rfc4627_jsonrpc_homepage = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_fetch = git +pkg_rfc4627_jsonrpc_repo = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_commit = master + +PACKAGES += riak_control +pkg_riak_control_name = riak_control +pkg_riak_control_description = Webmachine-based administration interface for Riak. +pkg_riak_control_homepage = https://github.com/basho/riak_control +pkg_riak_control_fetch = git +pkg_riak_control_repo = https://github.com/basho/riak_control +pkg_riak_control_commit = master + +PACKAGES += riak_core +pkg_riak_core_name = riak_core +pkg_riak_core_description = Distributed systems infrastructure used by Riak. +pkg_riak_core_homepage = https://github.com/basho/riak_core +pkg_riak_core_fetch = git +pkg_riak_core_repo = https://github.com/basho/riak_core +pkg_riak_core_commit = master + +PACKAGES += riak_dt +pkg_riak_dt_name = riak_dt +pkg_riak_dt_description = Convergent replicated datatypes in Erlang +pkg_riak_dt_homepage = https://github.com/basho/riak_dt +pkg_riak_dt_fetch = git +pkg_riak_dt_repo = https://github.com/basho/riak_dt +pkg_riak_dt_commit = master + +PACKAGES += riak_ensemble +pkg_riak_ensemble_name = riak_ensemble +pkg_riak_ensemble_description = Multi-Paxos framework in Erlang +pkg_riak_ensemble_homepage = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_fetch = git +pkg_riak_ensemble_repo = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_commit = master + +PACKAGES += riak_kv +pkg_riak_kv_name = riak_kv +pkg_riak_kv_description = Riak Key/Value Store +pkg_riak_kv_homepage = https://github.com/basho/riak_kv +pkg_riak_kv_fetch = git +pkg_riak_kv_repo = https://github.com/basho/riak_kv +pkg_riak_kv_commit = master + +PACKAGES += riak_pg +pkg_riak_pg_name = riak_pg +pkg_riak_pg_description = Distributed process groups with riak_core. +pkg_riak_pg_homepage = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_fetch = git +pkg_riak_pg_repo = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_commit = master + +PACKAGES += riak_pipe +pkg_riak_pipe_name = riak_pipe +pkg_riak_pipe_description = Riak Pipelines +pkg_riak_pipe_homepage = https://github.com/basho/riak_pipe +pkg_riak_pipe_fetch = git +pkg_riak_pipe_repo = https://github.com/basho/riak_pipe +pkg_riak_pipe_commit = master + +PACKAGES += riak_sysmon +pkg_riak_sysmon_name = riak_sysmon +pkg_riak_sysmon_description = Simple OTP app for managing Erlang VM system_monitor event messages +pkg_riak_sysmon_homepage = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_fetch = git +pkg_riak_sysmon_repo = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_commit = master + +PACKAGES += riak_test +pkg_riak_test_name = riak_test +pkg_riak_test_description = I'm in your cluster, testing your riaks +pkg_riak_test_homepage = https://github.com/basho/riak_test +pkg_riak_test_fetch = git +pkg_riak_test_repo = https://github.com/basho/riak_test +pkg_riak_test_commit = master + +PACKAGES += riakc +pkg_riakc_name = riakc +pkg_riakc_description = Erlang clients for Riak. +pkg_riakc_homepage = https://github.com/basho/riak-erlang-client +pkg_riakc_fetch = git +pkg_riakc_repo = https://github.com/basho/riak-erlang-client +pkg_riakc_commit = master + +PACKAGES += riakhttpc +pkg_riakhttpc_name = riakhttpc +pkg_riakhttpc_description = Riak Erlang client using the HTTP interface +pkg_riakhttpc_homepage = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_fetch = git +pkg_riakhttpc_repo = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_commit = master + +PACKAGES += riaknostic +pkg_riaknostic_name = riaknostic +pkg_riaknostic_description = A diagnostic tool for Riak installations, to find common errors asap +pkg_riaknostic_homepage = https://github.com/basho/riaknostic +pkg_riaknostic_fetch = git +pkg_riaknostic_repo = https://github.com/basho/riaknostic +pkg_riaknostic_commit = master + +PACKAGES += riakpool +pkg_riakpool_name = riakpool +pkg_riakpool_description = erlang riak client pool +pkg_riakpool_homepage = https://github.com/dweldon/riakpool +pkg_riakpool_fetch = git +pkg_riakpool_repo = https://github.com/dweldon/riakpool +pkg_riakpool_commit = master + +PACKAGES += rivus_cep +pkg_rivus_cep_name = rivus_cep +pkg_rivus_cep_description = Complex event processing in Erlang +pkg_rivus_cep_homepage = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_fetch = git +pkg_rivus_cep_repo = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_commit = master + +PACKAGES += rlimit +pkg_rlimit_name = rlimit +pkg_rlimit_description = Magnus Klaar's rate limiter code from etorrent +pkg_rlimit_homepage = https://github.com/jlouis/rlimit +pkg_rlimit_fetch = git +pkg_rlimit_repo = https://github.com/jlouis/rlimit +pkg_rlimit_commit = master + +PACKAGES += rust_mk +pkg_rust_mk_name = rust_mk +pkg_rust_mk_description = Build Rust crates in an Erlang application +pkg_rust_mk_homepage = https://github.com/goertzenator/rust.mk +pkg_rust_mk_fetch = git +pkg_rust_mk_repo = https://github.com/goertzenator/rust.mk +pkg_rust_mk_commit = master + +PACKAGES += safetyvalve +pkg_safetyvalve_name = safetyvalve +pkg_safetyvalve_description = A safety valve for your erlang node +pkg_safetyvalve_homepage = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_fetch = git +pkg_safetyvalve_repo = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_commit = master + +PACKAGES += seestar +pkg_seestar_name = seestar +pkg_seestar_description = The Erlang client for Cassandra 1.2+ binary protocol +pkg_seestar_homepage = https://github.com/iamaleksey/seestar +pkg_seestar_fetch = git +pkg_seestar_repo = https://github.com/iamaleksey/seestar +pkg_seestar_commit = master + +PACKAGES += service +pkg_service_name = service +pkg_service_description = A minimal Erlang behavior for creating CloudI internal services +pkg_service_homepage = http://cloudi.org/ +pkg_service_fetch = git +pkg_service_repo = https://github.com/CloudI/service +pkg_service_commit = master + +PACKAGES += setup +pkg_setup_name = setup +pkg_setup_description = Generic setup utility for Erlang-based systems +pkg_setup_homepage = https://github.com/uwiger/setup +pkg_setup_fetch = git +pkg_setup_repo = https://github.com/uwiger/setup +pkg_setup_commit = master + +PACKAGES += sext +pkg_sext_name = sext +pkg_sext_description = Sortable Erlang Term Serialization +pkg_sext_homepage = https://github.com/uwiger/sext +pkg_sext_fetch = git +pkg_sext_repo = https://github.com/uwiger/sext +pkg_sext_commit = master + +PACKAGES += sfmt +pkg_sfmt_name = sfmt +pkg_sfmt_description = SFMT pseudo random number generator for Erlang. +pkg_sfmt_homepage = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_fetch = git +pkg_sfmt_repo = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_commit = master + +PACKAGES += sgte +pkg_sgte_name = sgte +pkg_sgte_description = A simple Erlang Template Engine +pkg_sgte_homepage = https://github.com/filippo/sgte +pkg_sgte_fetch = git +pkg_sgte_repo = https://github.com/filippo/sgte +pkg_sgte_commit = master + +PACKAGES += sheriff +pkg_sheriff_name = sheriff +pkg_sheriff_description = Parse transform for type based validation. +pkg_sheriff_homepage = http://ninenines.eu +pkg_sheriff_fetch = git +pkg_sheriff_repo = https://github.com/extend/sheriff +pkg_sheriff_commit = master + +PACKAGES += shotgun +pkg_shotgun_name = shotgun +pkg_shotgun_description = better than just a gun +pkg_shotgun_homepage = https://github.com/inaka/shotgun +pkg_shotgun_fetch = git +pkg_shotgun_repo = https://github.com/inaka/shotgun +pkg_shotgun_commit = master + +PACKAGES += sidejob +pkg_sidejob_name = sidejob +pkg_sidejob_description = Parallel worker and capacity limiting library for Erlang +pkg_sidejob_homepage = https://github.com/basho/sidejob +pkg_sidejob_fetch = git +pkg_sidejob_repo = https://github.com/basho/sidejob +pkg_sidejob_commit = master + +PACKAGES += sieve +pkg_sieve_name = sieve +pkg_sieve_description = sieve is a simple TCP routing proxy (layer 7) in erlang +pkg_sieve_homepage = https://github.com/benoitc/sieve +pkg_sieve_fetch = git +pkg_sieve_repo = https://github.com/benoitc/sieve +pkg_sieve_commit = master + +PACKAGES += sighandler +pkg_sighandler_name = sighandler +pkg_sighandler_description = Handle UNIX signals in Er lang +pkg_sighandler_homepage = https://github.com/jkingsbery/sighandler +pkg_sighandler_fetch = git +pkg_sighandler_repo = https://github.com/jkingsbery/sighandler +pkg_sighandler_commit = master + +PACKAGES += simhash +pkg_simhash_name = simhash +pkg_simhash_description = Simhashing for Erlang -- hashing algorithm to find near-duplicates in binary data. +pkg_simhash_homepage = https://github.com/ferd/simhash +pkg_simhash_fetch = git +pkg_simhash_repo = https://github.com/ferd/simhash +pkg_simhash_commit = master + +PACKAGES += simple_bridge +pkg_simple_bridge_name = simple_bridge +pkg_simple_bridge_description = A simple, standardized interface library to Erlang HTTP Servers. +pkg_simple_bridge_homepage = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_fetch = git +pkg_simple_bridge_repo = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_commit = master + +PACKAGES += simple_oauth2 +pkg_simple_oauth2_name = simple_oauth2 +pkg_simple_oauth2_description = Simple erlang OAuth2 client module for any http server framework (Google, Facebook, Yandex, Vkontakte are preconfigured) +pkg_simple_oauth2_homepage = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_fetch = git +pkg_simple_oauth2_repo = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_commit = master + +PACKAGES += skel +pkg_skel_name = skel +pkg_skel_description = A Streaming Process-based Skeleton Library for Erlang +pkg_skel_homepage = https://github.com/ParaPhrase/skel +pkg_skel_fetch = git +pkg_skel_repo = https://github.com/ParaPhrase/skel +pkg_skel_commit = master + +PACKAGES += slack +pkg_slack_name = slack +pkg_slack_description = Minimal slack notification OTP library. +pkg_slack_homepage = https://github.com/DonBranson/slack +pkg_slack_fetch = git +pkg_slack_repo = https://github.com/DonBranson/slack.git +pkg_slack_commit = master + +PACKAGES += smother +pkg_smother_name = smother +pkg_smother_description = Extended code coverage metrics for Erlang. +pkg_smother_homepage = https://ramsay-t.github.io/Smother/ +pkg_smother_fetch = git +pkg_smother_repo = https://github.com/ramsay-t/Smother +pkg_smother_commit = master + +PACKAGES += snappyer +pkg_snappyer_name = snappyer +pkg_snappyer_description = Snappy as nif for Erlang +pkg_snappyer_homepage = https://github.com/zmstone/snappyer +pkg_snappyer_fetch = git +pkg_snappyer_repo = https://github.com/zmstone/snappyer.git +pkg_snappyer_commit = master + +PACKAGES += social +pkg_social_name = social +pkg_social_description = Cowboy handler for social login via OAuth2 providers +pkg_social_homepage = https://github.com/dvv/social +pkg_social_fetch = git +pkg_social_repo = https://github.com/dvv/social +pkg_social_commit = master + +PACKAGES += spapi_router +pkg_spapi_router_name = spapi_router +pkg_spapi_router_description = Partially-connected Erlang clustering +pkg_spapi_router_homepage = https://github.com/spilgames/spapi-router +pkg_spapi_router_fetch = git +pkg_spapi_router_repo = https://github.com/spilgames/spapi-router +pkg_spapi_router_commit = master + +PACKAGES += sqerl +pkg_sqerl_name = sqerl +pkg_sqerl_description = An Erlang-flavoured SQL DSL +pkg_sqerl_homepage = https://github.com/hairyhum/sqerl +pkg_sqerl_fetch = git +pkg_sqerl_repo = https://github.com/hairyhum/sqerl +pkg_sqerl_commit = master + +PACKAGES += srly +pkg_srly_name = srly +pkg_srly_description = Native Erlang Unix serial interface +pkg_srly_homepage = https://github.com/msantos/srly +pkg_srly_fetch = git +pkg_srly_repo = https://github.com/msantos/srly +pkg_srly_commit = master + +PACKAGES += sshrpc +pkg_sshrpc_name = sshrpc +pkg_sshrpc_description = Erlang SSH RPC module (experimental) +pkg_sshrpc_homepage = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_fetch = git +pkg_sshrpc_repo = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_commit = master + +PACKAGES += stable +pkg_stable_name = stable +pkg_stable_description = Library of assorted helpers for Cowboy web server. +pkg_stable_homepage = https://github.com/dvv/stable +pkg_stable_fetch = git +pkg_stable_repo = https://github.com/dvv/stable +pkg_stable_commit = master + +PACKAGES += statebox +pkg_statebox_name = statebox +pkg_statebox_description = Erlang state monad with merge/conflict-resolution capabilities. Useful for Riak. +pkg_statebox_homepage = https://github.com/mochi/statebox +pkg_statebox_fetch = git +pkg_statebox_repo = https://github.com/mochi/statebox +pkg_statebox_commit = master + +PACKAGES += statebox_riak +pkg_statebox_riak_name = statebox_riak +pkg_statebox_riak_description = Convenience library that makes it easier to use statebox with riak, extracted from best practices in our production code at Mochi Media. +pkg_statebox_riak_homepage = https://github.com/mochi/statebox_riak +pkg_statebox_riak_fetch = git +pkg_statebox_riak_repo = https://github.com/mochi/statebox_riak +pkg_statebox_riak_commit = master + +PACKAGES += statman +pkg_statman_name = statman +pkg_statman_description = Efficiently collect massive volumes of metrics inside the Erlang VM +pkg_statman_homepage = https://github.com/knutin/statman +pkg_statman_fetch = git +pkg_statman_repo = https://github.com/knutin/statman +pkg_statman_commit = master + +PACKAGES += statsderl +pkg_statsderl_name = statsderl +pkg_statsderl_description = StatsD client (erlang) +pkg_statsderl_homepage = https://github.com/lpgauth/statsderl +pkg_statsderl_fetch = git +pkg_statsderl_repo = https://github.com/lpgauth/statsderl +pkg_statsderl_commit = master + +PACKAGES += stdinout_pool +pkg_stdinout_pool_name = stdinout_pool +pkg_stdinout_pool_description = stdinout_pool : stuff goes in, stuff goes out. there's never any miscommunication. +pkg_stdinout_pool_homepage = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_fetch = git +pkg_stdinout_pool_repo = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_commit = master + +PACKAGES += stockdb +pkg_stockdb_name = stockdb +pkg_stockdb_description = Database for storing Stock Exchange quotes in erlang +pkg_stockdb_homepage = https://github.com/maxlapshin/stockdb +pkg_stockdb_fetch = git +pkg_stockdb_repo = https://github.com/maxlapshin/stockdb +pkg_stockdb_commit = master + +PACKAGES += stripe +pkg_stripe_name = stripe +pkg_stripe_description = Erlang interface to the stripe.com API +pkg_stripe_homepage = https://github.com/mattsta/stripe-erlang +pkg_stripe_fetch = git +pkg_stripe_repo = https://github.com/mattsta/stripe-erlang +pkg_stripe_commit = v1 + +PACKAGES += subproc +pkg_subproc_name = subproc +pkg_subproc_description = unix subprocess manager with {active,once|false} modes +pkg_subproc_homepage = http://dozzie.jarowit.net/trac/wiki/subproc +pkg_subproc_fetch = git +pkg_subproc_repo = https://github.com/dozzie/subproc +pkg_subproc_commit = v0.1.0 + +PACKAGES += supervisor3 +pkg_supervisor3_name = supervisor3 +pkg_supervisor3_description = OTP supervisor with additional strategies +pkg_supervisor3_homepage = https://github.com/klarna/supervisor3 +pkg_supervisor3_fetch = git +pkg_supervisor3_repo = https://github.com/klarna/supervisor3.git +pkg_supervisor3_commit = master + +PACKAGES += surrogate +pkg_surrogate_name = surrogate +pkg_surrogate_description = Proxy server written in erlang. Supports reverse proxy load balancing and forward proxy with http (including CONNECT), socks4, socks5, and transparent proxy modes. +pkg_surrogate_homepage = https://github.com/skruger/Surrogate +pkg_surrogate_fetch = git +pkg_surrogate_repo = https://github.com/skruger/Surrogate +pkg_surrogate_commit = master + +PACKAGES += swab +pkg_swab_name = swab +pkg_swab_description = General purpose buffer handling module +pkg_swab_homepage = https://github.com/crownedgrouse/swab +pkg_swab_fetch = git +pkg_swab_repo = https://github.com/crownedgrouse/swab +pkg_swab_commit = master + +PACKAGES += swarm +pkg_swarm_name = swarm +pkg_swarm_description = Fast and simple acceptor pool for Erlang +pkg_swarm_homepage = https://github.com/jeremey/swarm +pkg_swarm_fetch = git +pkg_swarm_repo = https://github.com/jeremey/swarm +pkg_swarm_commit = master + +PACKAGES += switchboard +pkg_switchboard_name = switchboard +pkg_switchboard_description = A framework for processing email using worker plugins. +pkg_switchboard_homepage = https://github.com/thusfresh/switchboard +pkg_switchboard_fetch = git +pkg_switchboard_repo = https://github.com/thusfresh/switchboard +pkg_switchboard_commit = master + +PACKAGES += syn +pkg_syn_name = syn +pkg_syn_description = A global Process Registry and Process Group manager for Erlang. +pkg_syn_homepage = https://github.com/ostinelli/syn +pkg_syn_fetch = git +pkg_syn_repo = https://github.com/ostinelli/syn +pkg_syn_commit = master + +PACKAGES += sync +pkg_sync_name = sync +pkg_sync_description = On-the-fly recompiling and reloading in Erlang. +pkg_sync_homepage = https://github.com/rustyio/sync +pkg_sync_fetch = git +pkg_sync_repo = https://github.com/rustyio/sync +pkg_sync_commit = master + +PACKAGES += syntaxerl +pkg_syntaxerl_name = syntaxerl +pkg_syntaxerl_description = Syntax checker for Erlang +pkg_syntaxerl_homepage = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_fetch = git +pkg_syntaxerl_repo = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_commit = master + +PACKAGES += syslog +pkg_syslog_name = syslog +pkg_syslog_description = Erlang port driver for interacting with syslog via syslog(3) +pkg_syslog_homepage = https://github.com/Vagabond/erlang-syslog +pkg_syslog_fetch = git +pkg_syslog_repo = https://github.com/Vagabond/erlang-syslog +pkg_syslog_commit = master + +PACKAGES += taskforce +pkg_taskforce_name = taskforce +pkg_taskforce_description = Erlang worker pools for controlled parallelisation of arbitrary tasks. +pkg_taskforce_homepage = https://github.com/g-andrade/taskforce +pkg_taskforce_fetch = git +pkg_taskforce_repo = https://github.com/g-andrade/taskforce +pkg_taskforce_commit = master + +PACKAGES += tddreloader +pkg_tddreloader_name = tddreloader +pkg_tddreloader_description = Shell utility for recompiling, reloading, and testing code as it changes +pkg_tddreloader_homepage = https://github.com/version2beta/tddreloader +pkg_tddreloader_fetch = git +pkg_tddreloader_repo = https://github.com/version2beta/tddreloader +pkg_tddreloader_commit = master + +PACKAGES += tempo +pkg_tempo_name = tempo +pkg_tempo_description = NIF-based date and time parsing and formatting for Erlang. +pkg_tempo_homepage = https://github.com/selectel/tempo +pkg_tempo_fetch = git +pkg_tempo_repo = https://github.com/selectel/tempo +pkg_tempo_commit = master + +PACKAGES += ticktick +pkg_ticktick_name = ticktick +pkg_ticktick_description = Ticktick is an id generator for message service. +pkg_ticktick_homepage = https://github.com/ericliang/ticktick +pkg_ticktick_fetch = git +pkg_ticktick_repo = https://github.com/ericliang/ticktick +pkg_ticktick_commit = master + +PACKAGES += tinymq +pkg_tinymq_name = tinymq +pkg_tinymq_description = TinyMQ - a diminutive, in-memory message queue +pkg_tinymq_homepage = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_fetch = git +pkg_tinymq_repo = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_commit = master + +PACKAGES += tinymt +pkg_tinymt_name = tinymt +pkg_tinymt_description = TinyMT pseudo random number generator for Erlang. +pkg_tinymt_homepage = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_fetch = git +pkg_tinymt_repo = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_commit = master + +PACKAGES += tirerl +pkg_tirerl_name = tirerl +pkg_tirerl_description = Erlang interface to Elastic Search +pkg_tirerl_homepage = https://github.com/inaka/tirerl +pkg_tirerl_fetch = git +pkg_tirerl_repo = https://github.com/inaka/tirerl +pkg_tirerl_commit = master + +PACKAGES += toml +pkg_toml_name = toml +pkg_toml_description = TOML (0.4.0) config parser +pkg_toml_homepage = http://dozzie.jarowit.net/trac/wiki/TOML +pkg_toml_fetch = git +pkg_toml_repo = https://github.com/dozzie/toml +pkg_toml_commit = v0.2.0 + +PACKAGES += traffic_tools +pkg_traffic_tools_name = traffic_tools +pkg_traffic_tools_description = Simple traffic limiting library +pkg_traffic_tools_homepage = https://github.com/systra/traffic_tools +pkg_traffic_tools_fetch = git +pkg_traffic_tools_repo = https://github.com/systra/traffic_tools +pkg_traffic_tools_commit = master + +PACKAGES += trails +pkg_trails_name = trails +pkg_trails_description = A couple of improvements over Cowboy Routes +pkg_trails_homepage = http://inaka.github.io/cowboy-trails/ +pkg_trails_fetch = git +pkg_trails_repo = https://github.com/inaka/cowboy-trails +pkg_trails_commit = master + +PACKAGES += trane +pkg_trane_name = trane +pkg_trane_description = SAX style broken HTML parser in Erlang +pkg_trane_homepage = https://github.com/massemanet/trane +pkg_trane_fetch = git +pkg_trane_repo = https://github.com/massemanet/trane +pkg_trane_commit = master + +PACKAGES += transit +pkg_transit_name = transit +pkg_transit_description = transit format for erlang +pkg_transit_homepage = https://github.com/isaiah/transit-erlang +pkg_transit_fetch = git +pkg_transit_repo = https://github.com/isaiah/transit-erlang +pkg_transit_commit = master + +PACKAGES += trie +pkg_trie_name = trie +pkg_trie_description = Erlang Trie Implementation +pkg_trie_homepage = https://github.com/okeuday/trie +pkg_trie_fetch = git +pkg_trie_repo = https://github.com/okeuday/trie +pkg_trie_commit = master + +PACKAGES += triq +pkg_triq_name = triq +pkg_triq_description = Trifork QuickCheck +pkg_triq_homepage = https://triq.gitlab.io +pkg_triq_fetch = git +pkg_triq_repo = https://gitlab.com/triq/triq.git +pkg_triq_commit = master + +PACKAGES += tunctl +pkg_tunctl_name = tunctl +pkg_tunctl_description = Erlang TUN/TAP interface +pkg_tunctl_homepage = https://github.com/msantos/tunctl +pkg_tunctl_fetch = git +pkg_tunctl_repo = https://github.com/msantos/tunctl +pkg_tunctl_commit = master + +PACKAGES += twerl +pkg_twerl_name = twerl +pkg_twerl_description = Erlang client for the Twitter Streaming API +pkg_twerl_homepage = https://github.com/lucaspiller/twerl +pkg_twerl_fetch = git +pkg_twerl_repo = https://github.com/lucaspiller/twerl +pkg_twerl_commit = oauth + +PACKAGES += twitter_erlang +pkg_twitter_erlang_name = twitter_erlang +pkg_twitter_erlang_description = An Erlang twitter client +pkg_twitter_erlang_homepage = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_fetch = git +pkg_twitter_erlang_repo = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_commit = master + +PACKAGES += ucol_nif +pkg_ucol_nif_name = ucol_nif +pkg_ucol_nif_description = ICU based collation Erlang module +pkg_ucol_nif_homepage = https://github.com/refuge/ucol_nif +pkg_ucol_nif_fetch = git +pkg_ucol_nif_repo = https://github.com/refuge/ucol_nif +pkg_ucol_nif_commit = master + +PACKAGES += unicorn +pkg_unicorn_name = unicorn +pkg_unicorn_description = Generic configuration server +pkg_unicorn_homepage = https://github.com/shizzard/unicorn +pkg_unicorn_fetch = git +pkg_unicorn_repo = https://github.com/shizzard/unicorn +pkg_unicorn_commit = master + +PACKAGES += unsplit +pkg_unsplit_name = unsplit +pkg_unsplit_description = Resolves conflicts in Mnesia after network splits +pkg_unsplit_homepage = https://github.com/uwiger/unsplit +pkg_unsplit_fetch = git +pkg_unsplit_repo = https://github.com/uwiger/unsplit +pkg_unsplit_commit = master + +PACKAGES += uuid +pkg_uuid_name = uuid +pkg_uuid_description = Erlang UUID Implementation +pkg_uuid_homepage = https://github.com/okeuday/uuid +pkg_uuid_fetch = git +pkg_uuid_repo = https://github.com/okeuday/uuid +pkg_uuid_commit = master + +PACKAGES += ux +pkg_ux_name = ux +pkg_ux_description = Unicode eXtention for Erlang (Strings, Collation) +pkg_ux_homepage = https://github.com/erlang-unicode/ux +pkg_ux_fetch = git +pkg_ux_repo = https://github.com/erlang-unicode/ux +pkg_ux_commit = master + +PACKAGES += vert +pkg_vert_name = vert +pkg_vert_description = Erlang binding to libvirt virtualization API +pkg_vert_homepage = https://github.com/msantos/erlang-libvirt +pkg_vert_fetch = git +pkg_vert_repo = https://github.com/msantos/erlang-libvirt +pkg_vert_commit = master + +PACKAGES += verx +pkg_verx_name = verx +pkg_verx_description = Erlang implementation of the libvirtd remote protocol +pkg_verx_homepage = https://github.com/msantos/verx +pkg_verx_fetch = git +pkg_verx_repo = https://github.com/msantos/verx +pkg_verx_commit = master + +PACKAGES += vmq_acl +pkg_vmq_acl_name = vmq_acl +pkg_vmq_acl_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_acl_homepage = https://verne.mq/ +pkg_vmq_acl_fetch = git +pkg_vmq_acl_repo = https://github.com/erlio/vmq_acl +pkg_vmq_acl_commit = master + +PACKAGES += vmq_bridge +pkg_vmq_bridge_name = vmq_bridge +pkg_vmq_bridge_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_bridge_homepage = https://verne.mq/ +pkg_vmq_bridge_fetch = git +pkg_vmq_bridge_repo = https://github.com/erlio/vmq_bridge +pkg_vmq_bridge_commit = master + +PACKAGES += vmq_graphite +pkg_vmq_graphite_name = vmq_graphite +pkg_vmq_graphite_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_graphite_homepage = https://verne.mq/ +pkg_vmq_graphite_fetch = git +pkg_vmq_graphite_repo = https://github.com/erlio/vmq_graphite +pkg_vmq_graphite_commit = master + +PACKAGES += vmq_passwd +pkg_vmq_passwd_name = vmq_passwd +pkg_vmq_passwd_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_passwd_homepage = https://verne.mq/ +pkg_vmq_passwd_fetch = git +pkg_vmq_passwd_repo = https://github.com/erlio/vmq_passwd +pkg_vmq_passwd_commit = master + +PACKAGES += vmq_server +pkg_vmq_server_name = vmq_server +pkg_vmq_server_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_server_homepage = https://verne.mq/ +pkg_vmq_server_fetch = git +pkg_vmq_server_repo = https://github.com/erlio/vmq_server +pkg_vmq_server_commit = master + +PACKAGES += vmq_snmp +pkg_vmq_snmp_name = vmq_snmp +pkg_vmq_snmp_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_snmp_homepage = https://verne.mq/ +pkg_vmq_snmp_fetch = git +pkg_vmq_snmp_repo = https://github.com/erlio/vmq_snmp +pkg_vmq_snmp_commit = master + +PACKAGES += vmq_systree +pkg_vmq_systree_name = vmq_systree +pkg_vmq_systree_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_systree_homepage = https://verne.mq/ +pkg_vmq_systree_fetch = git +pkg_vmq_systree_repo = https://github.com/erlio/vmq_systree +pkg_vmq_systree_commit = master + +PACKAGES += vmstats +pkg_vmstats_name = vmstats +pkg_vmstats_description = tiny Erlang app that works in conjunction with statsderl in order to generate information on the Erlang VM for graphite logs. +pkg_vmstats_homepage = https://github.com/ferd/vmstats +pkg_vmstats_fetch = git +pkg_vmstats_repo = https://github.com/ferd/vmstats +pkg_vmstats_commit = master + +PACKAGES += walrus +pkg_walrus_name = walrus +pkg_walrus_description = Walrus - Mustache-like Templating +pkg_walrus_homepage = https://github.com/devinus/walrus +pkg_walrus_fetch = git +pkg_walrus_repo = https://github.com/devinus/walrus +pkg_walrus_commit = master + +PACKAGES += webmachine +pkg_webmachine_name = webmachine +pkg_webmachine_description = A REST-based system for building web applications. +pkg_webmachine_homepage = https://github.com/basho/webmachine +pkg_webmachine_fetch = git +pkg_webmachine_repo = https://github.com/basho/webmachine +pkg_webmachine_commit = master + +PACKAGES += websocket_client +pkg_websocket_client_name = websocket_client +pkg_websocket_client_description = Erlang websocket client (ws and wss supported) +pkg_websocket_client_homepage = https://github.com/jeremyong/websocket_client +pkg_websocket_client_fetch = git +pkg_websocket_client_repo = https://github.com/jeremyong/websocket_client +pkg_websocket_client_commit = master + +PACKAGES += worker_pool +pkg_worker_pool_name = worker_pool +pkg_worker_pool_description = a simple erlang worker pool +pkg_worker_pool_homepage = https://github.com/inaka/worker_pool +pkg_worker_pool_fetch = git +pkg_worker_pool_repo = https://github.com/inaka/worker_pool +pkg_worker_pool_commit = master + +PACKAGES += wrangler +pkg_wrangler_name = wrangler +pkg_wrangler_description = Import of the Wrangler svn repository. +pkg_wrangler_homepage = http://www.cs.kent.ac.uk/projects/wrangler/Home.html +pkg_wrangler_fetch = git +pkg_wrangler_repo = https://github.com/RefactoringTools/wrangler +pkg_wrangler_commit = master + +PACKAGES += wsock +pkg_wsock_name = wsock +pkg_wsock_description = Erlang library to build WebSocket clients and servers +pkg_wsock_homepage = https://github.com/madtrick/wsock +pkg_wsock_fetch = git +pkg_wsock_repo = https://github.com/madtrick/wsock +pkg_wsock_commit = master + +PACKAGES += xhttpc +pkg_xhttpc_name = xhttpc +pkg_xhttpc_description = Extensible HTTP Client for Erlang +pkg_xhttpc_homepage = https://github.com/seriyps/xhttpc +pkg_xhttpc_fetch = git +pkg_xhttpc_repo = https://github.com/seriyps/xhttpc +pkg_xhttpc_commit = master + +PACKAGES += xref_runner +pkg_xref_runner_name = xref_runner +pkg_xref_runner_description = Erlang Xref Runner (inspired in rebar xref) +pkg_xref_runner_homepage = https://github.com/inaka/xref_runner +pkg_xref_runner_fetch = git +pkg_xref_runner_repo = https://github.com/inaka/xref_runner +pkg_xref_runner_commit = master + +PACKAGES += yamerl +pkg_yamerl_name = yamerl +pkg_yamerl_description = YAML 1.2 parser in pure Erlang +pkg_yamerl_homepage = https://github.com/yakaz/yamerl +pkg_yamerl_fetch = git +pkg_yamerl_repo = https://github.com/yakaz/yamerl +pkg_yamerl_commit = master + +PACKAGES += yamler +pkg_yamler_name = yamler +pkg_yamler_description = libyaml-based yaml loader for Erlang +pkg_yamler_homepage = https://github.com/goertzenator/yamler +pkg_yamler_fetch = git +pkg_yamler_repo = https://github.com/goertzenator/yamler +pkg_yamler_commit = master + +PACKAGES += yaws +pkg_yaws_name = yaws +pkg_yaws_description = Yaws webserver +pkg_yaws_homepage = http://yaws.hyber.org +pkg_yaws_fetch = git +pkg_yaws_repo = https://github.com/klacke/yaws +pkg_yaws_commit = master + +PACKAGES += zab_engine +pkg_zab_engine_name = zab_engine +pkg_zab_engine_description = zab propotocol implement by erlang +pkg_zab_engine_homepage = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_fetch = git +pkg_zab_engine_repo = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_commit = master + +PACKAGES += zabbix_sender +pkg_zabbix_sender_name = zabbix_sender +pkg_zabbix_sender_description = Zabbix trapper for sending data to Zabbix in pure Erlang +pkg_zabbix_sender_homepage = https://github.com/stalkermn/zabbix_sender +pkg_zabbix_sender_fetch = git +pkg_zabbix_sender_repo = https://github.com/stalkermn/zabbix_sender.git +pkg_zabbix_sender_commit = master + +PACKAGES += zeta +pkg_zeta_name = zeta +pkg_zeta_description = HTTP access log parser in Erlang +pkg_zeta_homepage = https://github.com/s1n4/zeta +pkg_zeta_fetch = git +pkg_zeta_repo = https://github.com/s1n4/zeta +pkg_zeta_commit = master + +PACKAGES += zippers +pkg_zippers_name = zippers +pkg_zippers_description = A library for functional zipper data structures in Erlang. Read more on zippers +pkg_zippers_homepage = https://github.com/ferd/zippers +pkg_zippers_fetch = git +pkg_zippers_repo = https://github.com/ferd/zippers +pkg_zippers_commit = master + +PACKAGES += zlists +pkg_zlists_name = zlists +pkg_zlists_description = Erlang lazy lists library. +pkg_zlists_homepage = https://github.com/vjache/erlang-zlists +pkg_zlists_fetch = git +pkg_zlists_repo = https://github.com/vjache/erlang-zlists +pkg_zlists_commit = master + +PACKAGES += zraft_lib +pkg_zraft_lib_name = zraft_lib +pkg_zraft_lib_description = Erlang raft consensus protocol implementation +pkg_zraft_lib_homepage = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_fetch = git +pkg_zraft_lib_repo = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_commit = master + +PACKAGES += zucchini +pkg_zucchini_name = zucchini +pkg_zucchini_description = An Erlang INI parser +pkg_zucchini_homepage = https://github.com/devinus/zucchini +pkg_zucchini_fetch = git +pkg_zucchini_repo = https://github.com/devinus/zucchini +pkg_zucchini_commit = master + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: search + +define pkg_print + $(verbose) printf "%s\n" \ + $(if $(call core_eq,$(1),$(pkg_$(1)_name)),,"Pkg name: $(1)") \ + "App name: $(pkg_$(1)_name)" \ + "Description: $(pkg_$(1)_description)" \ + "Home page: $(pkg_$(1)_homepage)" \ + "Fetch with: $(pkg_$(1)_fetch)" \ + "Repository: $(pkg_$(1)_repo)" \ + "Commit: $(pkg_$(1)_commit)" \ + "" + +endef + +search: +ifdef q + $(foreach p,$(PACKAGES), \ + $(if $(findstring $(call core_lc,$(q)),$(call core_lc,$(pkg_$(p)_name) $(pkg_$(p)_description))), \ + $(call pkg_print,$(p)))) +else + $(foreach p,$(PACKAGES),$(call pkg_print,$(p))) +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-deps clean-tmp-deps.log + +# Configuration. + +ifdef OTP_DEPS +$(warning The variable OTP_DEPS is deprecated in favor of LOCAL_DEPS.) +endif + +IGNORE_DEPS ?= +export IGNORE_DEPS + +APPS_DIR ?= $(CURDIR)/apps +export APPS_DIR + +DEPS_DIR ?= $(CURDIR)/deps +export DEPS_DIR + +REBAR_DEPS_DIR = $(DEPS_DIR) +export REBAR_DEPS_DIR + +# External "early" plugins (see core/plugins.mk for regular plugins). +# They both use the core_dep_plugin macro. + +define core_dep_plugin +ifeq ($(2),$(PROJECT)) +-include $$(patsubst $(PROJECT)/%,%,$(1)) +else +-include $(DEPS_DIR)/$(1) + +$(DEPS_DIR)/$(1): $(DEPS_DIR)/$(2) ; +endif +endef + +DEP_EARLY_PLUGINS ?= + +$(foreach p,$(DEP_EARLY_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/early-plugins.mk,$p)))) + +dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) +dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ + $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) + +LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) +ALL_APPS_DIRS = $(if $(wildcard $(APPS_DIR)/),$(filter-out $(APPS_DIR),$(shell find $(APPS_DIR) -maxdepth 1 -type d))) +ALL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(foreach dep,$(filter-out $(IGNORE_DEPS),$(BUILD_DEPS) $(DEPS)),$(call dep_name,$(dep)))) + +ifeq ($(filter $(APPS_DIR) $(DEPS_DIR),$(subst :, ,$(ERL_LIBS))),) +ifeq ($(ERL_LIBS),) + ERL_LIBS = $(APPS_DIR):$(DEPS_DIR) +else + ERL_LIBS := $(ERL_LIBS):$(APPS_DIR):$(DEPS_DIR) +endif +endif +export ERL_LIBS + +export NO_AUTOPATCH + +# Verbosity. + +dep_verbose_0 = @echo " DEP $1 ($(call dep_commit,$1))"; +dep_verbose_2 = set -x; +dep_verbose = $(dep_verbose_$(V)) + +# Core targets. + +apps:: $(ALL_APPS_DIRS) clean-tmp-deps.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/apps.log +endif + $(verbose) mkdir -p $(ERLANG_MK_TMP) +# Create ebin directory for all apps to make sure Erlang recognizes them +# as proper OTP applications when using -include_lib. This is a temporary +# fix, a proper fix would be to compile apps/* in the right order. +ifndef IS_APP + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + mkdir -p $$dep/ebin; \ + done +endif +# at the toplevel: if LOCAL_DEPS is defined with at least one local app, only +# compile that list of apps. otherwise, compile everything. +# within an app: compile all LOCAL_DEPS that are (uncompiled) local apps + $(verbose) set -e; for dep in $(if $(LOCAL_DEPS_DIRS)$(IS_APP),$(LOCAL_DEPS_DIRS),$(ALL_APPS_DIRS)) ; do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/apps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/apps.log; \ + $(MAKE) -C $$dep IS_APP=1; \ + fi \ + done + +clean-tmp-deps.log: +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/deps.log +endif + +ifneq ($(SKIP_DEPS),) +deps:: +else +deps:: $(ALL_DEPS_DIRS) apps clean-tmp-deps.log + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) set -e; for dep in $(ALL_DEPS_DIRS) ; do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/deps.log; \ + if [ -f $$dep/GNUmakefile ] || [ -f $$dep/makefile ] || [ -f $$dep/Makefile ]; then \ + $(MAKE) -C $$dep IS_DEP=1; \ + else \ + echo "Error: No Makefile to build dependency $$dep." >&2; \ + exit 2; \ + fi \ + fi \ + done +endif + +# Deps related targets. + +# @todo rename GNUmakefile and makefile into Makefile first, if they exist +# While Makefile file could be GNUmakefile or makefile, +# in practice only Makefile is needed so far. +define dep_autopatch + if [ -f $(DEPS_DIR)/$(1)/erlang.mk ]; then \ + rm -rf $(DEPS_DIR)/$1/ebin/; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + $(call dep_autopatch_erlang_mk,$(1)); \ + elif [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + if [ -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch2,$1); \ + elif [ 0 != `grep -c "include ../\w*\.mk" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ 0 != `grep -ci "^[^#].*rebar" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ -n "`find $(DEPS_DIR)/$(1)/ -type f -name \*.mk -not -name erlang.mk -exec grep -i "^[^#].*rebar" '{}' \;`" ]; then \ + $(call dep_autopatch2,$(1)); \ + fi \ + else \ + if [ ! -d $(DEPS_DIR)/$(1)/src/ ]; then \ + $(call dep_autopatch_noop,$(1)); \ + else \ + $(call dep_autopatch2,$(1)); \ + fi \ + fi +endef + +define dep_autopatch2 + ! test -f $(DEPS_DIR)/$1/ebin/$1.app || \ + mv -n $(DEPS_DIR)/$1/ebin/$1.app $(DEPS_DIR)/$1/src/$1.app.src; \ + rm -f $(DEPS_DIR)/$1/ebin/$1.app; \ + if [ -f $(DEPS_DIR)/$1/src/$1.app.src.script ]; then \ + $(call erlang,$(call dep_autopatch_appsrc_script.erl,$(1))); \ + fi; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + if [ -f $(DEPS_DIR)/$(1)/rebar -o -f $(DEPS_DIR)/$(1)/rebar.config -o -f $(DEPS_DIR)/$(1)/rebar.config.script -o -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch_fetch_rebar); \ + $(call dep_autopatch_rebar,$(1)); \ + else \ + $(call dep_autopatch_gen,$(1)); \ + fi +endef + +define dep_autopatch_noop + printf "noop:\n" > $(DEPS_DIR)/$(1)/Makefile +endef + +# Replace "include erlang.mk" with a line that will load the parent Erlang.mk +# if given. Do it for all 3 possible Makefile file names. +ifeq ($(NO_AUTOPATCH_ERLANG_MK),) +define dep_autopatch_erlang_mk + for f in Makefile makefile GNUmakefile; do \ + if [ -f $(DEPS_DIR)/$1/$$f ]; then \ + sed -i.bak s/'include *erlang.mk'/'include $$(if $$(ERLANG_MK_FILENAME),$$(ERLANG_MK_FILENAME),erlang.mk)'/ $(DEPS_DIR)/$1/$$f; \ + fi \ + done +endef +else +define dep_autopatch_erlang_mk + : +endef +endif + +define dep_autopatch_gen + printf "%s\n" \ + "ERLC_OPTS = +debug_info" \ + "include ../../erlang.mk" > $(DEPS_DIR)/$(1)/Makefile +endef + +define dep_autopatch_fetch_rebar + mkdir -p $(ERLANG_MK_TMP); \ + if [ ! -d $(ERLANG_MK_TMP)/rebar ]; then \ + git clone -q -n -- https://github.com/rebar/rebar $(ERLANG_MK_TMP)/rebar; \ + cd $(ERLANG_MK_TMP)/rebar; \ + git checkout -q 576e12171ab8d69b048b827b92aa65d067deea01; \ + $(MAKE); \ + cd -; \ + fi +endef + +define dep_autopatch_rebar + if [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + mv $(DEPS_DIR)/$(1)/Makefile $(DEPS_DIR)/$(1)/Makefile.orig.mk; \ + fi; \ + $(call erlang,$(call dep_autopatch_rebar.erl,$(1))); \ + rm -f $(DEPS_DIR)/$(1)/ebin/$(1).app +endef + +define dep_autopatch_rebar.erl + application:load(rebar), + application:set_env(rebar, log_level, debug), + rmemo:start(), + Conf1 = case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config)") of + {ok, Conf0} -> Conf0; + _ -> [] + end, + {Conf, OsEnv} = fun() -> + case filelib:is_file("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)") of + false -> {Conf1, []}; + true -> + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf1, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', "$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings1), + Before = os:getenv(), + {ok, Conf2} = file:script("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings), + {Conf2, lists:foldl(fun(E, Acc) -> lists:delete(E, Acc) end, os:getenv(), Before)} + end + end(), + Write = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/Makefile)", Text, [append]) + end, + Escape = fun (Text) -> + re:replace(Text, "\\\\$$", "\$$$$", [global, {return, list}]) + end, + Write("IGNORE_DEPS += edown eper eunit_formatters meck node_package " + "rebar_lock_deps_plugin rebar_vsn_plugin reltool_util\n"), + Write("C_SRC_DIR = /path/do/not/exist\n"), + Write("C_SRC_TYPE = rebar\n"), + Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"), + Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]), + ToList = fun + (V) when is_atom(V) -> atom_to_list(V); + (V) when is_list(V) -> "'\\"" ++ V ++ "\\"'" + end, + fun() -> + Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"), + case lists:keyfind(erl_opts, 1, Conf) of + false -> ok; + {_, ErlOpts} -> + lists:foreach(fun + ({d, D}) -> + Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + ({d, DKey, DVal}) -> + Write("ERLC_OPTS += -D" ++ ToList(DKey) ++ "=" ++ ToList(DVal) ++ "\n"); + ({i, I}) -> + Write(["ERLC_OPTS += -I ", I, "\n"]); + ({platform_define, Regex, D}) -> + case rebar_utils:is_arch(Regex) of + true -> Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + false -> ok + end; + ({parse_transform, PT}) -> + Write("ERLC_OPTS += +'{parse_transform, " ++ ToList(PT) ++ "}'\n"); + (_) -> ok + end, ErlOpts) + end, + Write("\n") + end(), + GetHexVsn = fun(N) -> + case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of + {ok, Lock} -> + io:format("~p~n", [Lock]), + case lists:keyfind("1.1.0", 1, Lock) of + {_, LockPkgs} -> + io:format("~p~n", [LockPkgs]), + case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of + {_, {pkg, _, Vsn}, _} -> + io:format("~p~n", [Vsn]), + {N, {hex, binary_to_list(Vsn)}}; + _ -> + false + end; + _ -> + false + end; + _ -> + false + end + end, + fun() -> + File = case lists:keyfind(deps, 1, Conf) of + false -> []; + {_, Deps} -> + [begin case case Dep of + N when is_atom(N) -> GetHexVsn(N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, S}}; + {N, S} when is_tuple(S) -> {N, S}; + {N, _, S} -> {N, S}; + {N, _, S, _} -> {N, S}; + _ -> false + end of + false -> ok; + {Name, Source} -> + {Method, Repo, Commit} = case Source of + {hex, V} -> {hex, V, undefined}; + {git, R} -> {git, R, master}; + {M, R, {branch, C}} -> {M, R, C}; + {M, R, {ref, C}} -> {M, R, C}; + {M, R, {tag, C}} -> {M, R, C}; + {M, R, C} -> {M, R, C} + end, + Write(io_lib:format("DEPS += ~s\ndep_~s = ~s ~s ~s~n", [Name, Name, Method, Repo, Commit])) + end end || Dep <- Deps] + end + end(), + fun() -> + case lists:keyfind(erl_first_files, 1, Conf) of + false -> ok; + {_, Files} -> + Names = [[" ", case lists:reverse(F) of + "lre." ++ Elif -> lists:reverse(Elif); + Elif -> lists:reverse(Elif) + end] || "src/" ++ F <- Files], + Write(io_lib:format("COMPILE_FIRST +=~s\n", [Names])) + end + end(), + Write("\n\nrebar_dep: preprocess pre-deps deps pre-app app\n"), + Write("\npreprocess::\n"), + Write("\npre-deps::\n"), + Write("\npre-app::\n"), + PatchHook = fun(Cmd) -> + Cmd2 = re:replace(Cmd, "^([g]?make)(.*)( -C.*)", "\\\\1\\\\3\\\\2", [{return, list}]), + case Cmd2 of + "make -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "gmake -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "make " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + "gmake " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + _ -> Escape(Cmd) + end + end, + fun() -> + case lists:keyfind(pre_hooks, 1, Conf) of + false -> ok; + {_, Hooks} -> + [case H of + {'get-deps', Cmd} -> + Write("\npre-deps::\n\t" ++ PatchHook(Cmd) ++ "\n"); + {compile, Cmd} -> + Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + {Regex, compile, Cmd} -> + case rebar_utils:is_arch(Regex) of + true -> Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + false -> ok + end; + _ -> ok + end || H <- Hooks] + end + end(), + ShellToMk = fun(V) -> + re:replace(re:replace(V, "(\\\\$$)(\\\\w*)", "\\\\1(\\\\2)", [global]), + "-Werror\\\\b", "", [{return, list}, global]) + end, + PortSpecs = fun() -> + case lists:keyfind(port_specs, 1, Conf) of + false -> + case filelib:is_dir("$(call core_native_path,$(DEPS_DIR)/$1/c_src)") of + false -> []; + true -> + [{"priv/" ++ proplists:get_value(so_name, Conf, "$(1)_drv.so"), + proplists:get_value(port_sources, Conf, ["c_src/*.c"]), []}] + end; + {_, Specs} -> + lists:flatten([case S of + {Output, Input} -> {ShellToMk(Output), Input, []}; + {Regex, Output, Input} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, []}; + false -> [] + end; + {Regex, Output, Input, [{env, Env}]} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, Env}; + false -> [] + end + end || S <- Specs]) + end + end(), + PortSpecWrite = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/c_src/Makefile.erlang.mk)", Text, [append]) + end, + case PortSpecs of + [] -> ok; + _ -> + Write("\npre-app::\n\t$$\(MAKE) -f c_src/Makefile.erlang.mk\n"), + PortSpecWrite(io_lib:format("ERL_CFLAGS ?= -finline-functions -Wall -fPIC -I \\"~s/erts-~s/include\\" -I \\"~s\\"\n", + [code:root_dir(), erlang:system_info(version), code:lib_dir(erl_interface, include)])), + PortSpecWrite(io_lib:format("ERL_LDFLAGS ?= -L \\"~s\\" -lerl_interface -lei\n", + [code:lib_dir(erl_interface, lib)])), + [PortSpecWrite(["\n", E, "\n"]) || E <- OsEnv], + FilterEnv = fun(Env) -> + lists:flatten([case E of + {_, _} -> E; + {Regex, K, V} -> + case rebar_utils:is_arch(Regex) of + true -> {K, V}; + false -> [] + end + end || E <- Env]) + end, + MergeEnv = fun(Env) -> + lists:foldl(fun ({K, V}, Acc) -> + case lists:keyfind(K, 1, Acc) of + false -> [{K, rebar_utils:expand_env_variable(V, K, "")}|Acc]; + {_, V0} -> [{K, rebar_utils:expand_env_variable(V, K, V0)}|Acc] + end + end, [], Env) + end, + PortEnv = case lists:keyfind(port_env, 1, Conf) of + false -> []; + {_, PortEnv0} -> FilterEnv(PortEnv0) + end, + PortSpec = fun ({Output, Input0, Env}) -> + filelib:ensure_dir("$(call core_native_path,$(DEPS_DIR)/$1/)" ++ Output), + Input = [[" ", I] || I <- Input0], + PortSpecWrite([ + [["\n", K, " = ", ShellToMk(V)] || {K, V} <- lists:reverse(MergeEnv(PortEnv))], + case $(PLATFORM) of + darwin -> "\n\nLDFLAGS += -flat_namespace -undefined suppress"; + _ -> "" + end, + "\n\nall:: ", Output, "\n\n", + "%.o: %.c\n\t$$\(CC) -c -o $$\@ $$\< $$\(CFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.C\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cc\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cpp\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + [[Output, ": ", K, " += ", ShellToMk(V), "\n"] || {K, V} <- lists:reverse(MergeEnv(FilterEnv(Env)))], + Output, ": $$\(foreach ext,.c .C .cc .cpp,", + "$$\(patsubst %$$\(ext),%.o,$$\(filter %$$\(ext),$$\(wildcard", Input, "))))\n", + "\t$$\(CC) -o $$\@ $$\? $$\(LDFLAGS) $$\(ERL_LDFLAGS) $$\(DRV_LDFLAGS) $$\(EXE_LDFLAGS)", + case {filename:extension(Output), $(PLATFORM)} of + {[], _} -> "\n"; + {_, darwin} -> "\n"; + _ -> " -shared\n" + end]) + end, + [PortSpec(S) || S <- PortSpecs] + end, + Write("\ninclude $$\(if $$\(ERLANG_MK_FILENAME),$$\(ERLANG_MK_FILENAME),erlang.mk)"), + RunPlugin = fun(Plugin, Step) -> + case erlang:function_exported(Plugin, Step, 2) of + false -> ok; + true -> + c:cd("$(call core_native_path,$(DEPS_DIR)/$1/)"), + Ret = Plugin:Step({config, "", Conf, dict:new(), dict:new(), dict:new(), + dict:store(base_dir, "", dict:new())}, undefined), + io:format("rebar plugin ~p step ~p ret ~p~n", [Plugin, Step, Ret]) + end + end, + fun() -> + case lists:keyfind(plugins, 1, Conf) of + false -> ok; + {_, Plugins} -> + [begin + case lists:keyfind(deps, 1, Conf) of + false -> ok; + {_, Deps} -> + case lists:keyfind(P, 1, Deps) of + false -> ok; + _ -> + Path = "$(call core_native_path,$(DEPS_DIR)/)" ++ atom_to_list(P), + io:format("~s", [os:cmd("$(MAKE) -C $(call core_native_path,$(DEPS_DIR)/$1) " ++ Path)]), + io:format("~s", [os:cmd("$(MAKE) -C " ++ Path ++ " IS_DEP=1")]), + code:add_patha(Path ++ "/ebin") + end + end + end || P <- Plugins], + [case code:load_file(P) of + {module, P} -> ok; + _ -> + case lists:keyfind(plugin_dir, 1, Conf) of + false -> ok; + {_, PluginsDir} -> + ErlFile = "$(call core_native_path,$(DEPS_DIR)/$1/)" ++ PluginsDir ++ "/" ++ atom_to_list(P) ++ ".erl", + {ok, P, Bin} = compile:file(ErlFile, [binary]), + {module, P} = code:load_binary(P, ErlFile, Bin) + end + end || P <- Plugins], + [RunPlugin(P, preprocess) || P <- Plugins], + [RunPlugin(P, pre_compile) || P <- Plugins], + [RunPlugin(P, compile) || P <- Plugins] + end + end(), + halt() +endef + +define dep_autopatch_appsrc_script.erl + AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcScript = AppSrc ++ ".script", + {ok, Conf0} = file:consult(AppSrc), + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf0, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', AppSrcScript, Bindings1), + Conf = case file:script(AppSrcScript, Bindings) of + {ok, [C]} -> C; + {ok, C} -> C + end, + ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])), + halt() +endef + +define dep_autopatch_appsrc.erl + AppSrcOut = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcIn = case filelib:is_regular(AppSrcOut) of false -> "$(call core_native_path,$(DEPS_DIR)/$1/ebin/$1.app)"; true -> AppSrcOut end, + case filelib:is_regular(AppSrcIn) of + false -> ok; + true -> + {ok, [{application, $(1), L0}]} = file:consult(AppSrcIn), + L1 = lists:keystore(modules, 1, L0, {modules, []}), + L2 = case lists:keyfind(vsn, 1, L1) of + {_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, "git"}); + {_, {cmd, _}} -> lists:keyreplace(vsn, 1, L1, {vsn, "cmd"}); + _ -> L1 + end, + L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end, + ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])), + case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end + end, + halt() +endef + +define dep_fetch_git + git clone -q -n -- $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && git checkout -q $(call dep_commit,$(1)); +endef + +define dep_fetch_git-submodule + git submodule update --init -- $(DEPS_DIR)/$1; +endef + +define dep_fetch_hg + hg clone -q -U $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && hg update -q $(call dep_commit,$(1)); +endef + +define dep_fetch_svn + svn checkout -q $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_cp + cp -R $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_ln + ln -s $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +# Hex only has a package version. No need to look in the Erlang.mk packages. +define dep_fetch_hex + mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ + $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ + https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; +endef + +define dep_fetch_fail + echo "Error: Unknown or invalid dependency: $(1)." >&2; \ + exit 78; +endef + +# Kept for compatibility purposes with older Erlang.mk configuration. +define dep_fetch_legacy + $(warning WARNING: '$(1)' dependency configuration uses deprecated format.) \ + git clone -q -n -- $(word 1,$(dep_$(1))) $(DEPS_DIR)/$(1); \ + cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); +endef + +define dep_fetch + $(if $(dep_$(1)), \ + $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ + $(word 1,$(dep_$(1))), \ + $(if $(IS_DEP),legacy,fail)), \ + $(if $(filter $(1),$(PACKAGES)), \ + $(pkg_$(1)_fetch), \ + fail)) +endef + +define dep_target +$(DEPS_DIR)/$(call dep_name,$1): + $(eval DEP_NAME := $(call dep_name,$1)) + $(eval DEP_STR := $(if $(filter-out $1,$(DEP_NAME)),$1,"$1 ($(DEP_NAME))")) + $(verbose) if test -d $(APPS_DIR)/$(DEP_NAME); then \ + echo "Error: Dependency" $(DEP_STR) "conflicts with application found in $(APPS_DIR)/$(DEP_NAME)." >&2; \ + exit 17; \ + fi + $(verbose) mkdir -p $(DEPS_DIR) + $(dep_verbose) $(call dep_fetch_$(strip $(call dep_fetch,$(1))),$(1)) + $(verbose) if [ -f $(DEPS_DIR)/$(1)/configure.ac -o -f $(DEPS_DIR)/$(1)/configure.in ] \ + && [ ! -f $(DEPS_DIR)/$(1)/configure ]; then \ + echo " AUTO " $(1); \ + cd $(DEPS_DIR)/$(1) && autoreconf -Wall -vif -I m4; \ + fi + - $(verbose) if [ -f $(DEPS_DIR)/$(DEP_NAME)/configure ]; then \ + echo " CONF " $(DEP_STR); \ + cd $(DEPS_DIR)/$(DEP_NAME) && ./configure; \ + fi +ifeq ($(filter $(1),$(NO_AUTOPATCH)),) + $(verbose) if [ "$(1)" = "amqp_client" -a "$(RABBITMQ_CLIENT_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi; \ + if [ ! -d $(DEPS_DIR)/rabbitmq-server ]; then \ + echo " PATCH Downloading rabbitmq-server"; \ + git clone https://github.com/rabbitmq/rabbitmq-server.git $(DEPS_DIR)/rabbitmq-server; \ + fi; \ + ln -s $(DEPS_DIR)/amqp_client/deps/rabbit_common-0.0.0 $(DEPS_DIR)/rabbit_common; \ + elif [ "$(1)" = "rabbit" -a "$(RABBITMQ_SERVER_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi \ + else \ + $$(call dep_autopatch,$(DEP_NAME)) \ + fi +endif +endef + +$(foreach dep,$(BUILD_DEPS) $(DEPS),$(eval $(call dep_target,$(dep)))) + +ifndef IS_APP +clean:: clean-apps + +clean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep clean IS_APP=1; \ + done + +distclean:: distclean-apps + +distclean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep distclean IS_APP=1; \ + done +endif + +ifndef SKIP_DEPS +distclean:: distclean-deps + +distclean-deps: + $(gen_verbose) rm -rf $(DEPS_DIR) +endif + +# Forward-declare variables used in core/deps-tools.mk. This is required +# in case plugins use them. + +ERLANG_MK_RECURSIVE_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-deps-list.log +ERLANG_MK_RECURSIVE_DOC_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-doc-deps-list.log +ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log +ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log +ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Verbosity. + +proto_verbose_0 = @echo " PROTO " $(filter %.proto,$(?F)); +proto_verbose = $(proto_verbose_$(V)) + +# Core targets. + +define compile_proto + $(verbose) mkdir -p ebin/ include/ + $(proto_verbose) $(call erlang,$(call compile_proto.erl,$(1))) + $(proto_verbose) erlc +debug_info -o ebin/ ebin/*.erl + $(verbose) rm ebin/*.erl +endef + +define compile_proto.erl + [begin + protobuffs_compile:generate_source(F, + [{output_include_dir, "./include"}, + {output_src_dir, "./ebin"}]) + end || F <- string:tokens("$(1)", " ")], + halt(). +endef + +ifneq ($(wildcard src/),) +ebin/$(PROJECT).app:: $(sort $(call core_find,src/,*.proto)) + $(if $(strip $?),$(call compile_proto,$?)) +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-app + +# Configuration. + +ERLC_OPTS ?= -Werror +debug_info +warn_export_vars +warn_shadow_vars \ + +warn_obsolete_guard # +bin_opt_info +warn_export_all +warn_missing_spec +COMPILE_FIRST ?= +COMPILE_FIRST_PATHS = $(addprefix src/,$(addsuffix .erl,$(COMPILE_FIRST))) +ERLC_EXCLUDE ?= +ERLC_EXCLUDE_PATHS = $(addprefix src/,$(addsuffix .erl,$(ERLC_EXCLUDE))) + +ERLC_ASN1_OPTS ?= + +ERLC_MIB_OPTS ?= +COMPILE_MIB_FIRST ?= +COMPILE_MIB_FIRST_PATHS = $(addprefix mibs/,$(addsuffix .mib,$(COMPILE_MIB_FIRST))) + +# Verbosity. + +app_verbose_0 = @echo " APP " $(PROJECT); +app_verbose_2 = set -x; +app_verbose = $(app_verbose_$(V)) + +appsrc_verbose_0 = @echo " APP " $(PROJECT).app.src; +appsrc_verbose_2 = set -x; +appsrc_verbose = $(appsrc_verbose_$(V)) + +makedep_verbose_0 = @echo " DEPEND" $(PROJECT).d; +makedep_verbose_2 = set -x; +makedep_verbose = $(makedep_verbose_$(V)) + +erlc_verbose_0 = @echo " ERLC " $(filter-out $(patsubst %,%.erl,$(ERLC_EXCLUDE)),\ + $(filter %.erl %.core,$(?F))); +erlc_verbose_2 = set -x; +erlc_verbose = $(erlc_verbose_$(V)) + +xyrl_verbose_0 = @echo " XYRL " $(filter %.xrl %.yrl,$(?F)); +xyrl_verbose_2 = set -x; +xyrl_verbose = $(xyrl_verbose_$(V)) + +asn1_verbose_0 = @echo " ASN1 " $(filter %.asn1,$(?F)); +asn1_verbose_2 = set -x; +asn1_verbose = $(asn1_verbose_$(V)) + +mib_verbose_0 = @echo " MIB " $(filter %.bin %.mib,$(?F)); +mib_verbose_2 = set -x; +mib_verbose = $(mib_verbose_$(V)) + +ifneq ($(wildcard src/),) + +# Targets. + +ifeq ($(wildcard ebin/test),) +app:: deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build +else +app:: clean deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build +endif + +ifeq ($(wildcard src/$(PROJECT_MOD).erl),) +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, []}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +else +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {mod, {$(PROJECT_MOD), []}}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +endif + +app-build: ebin/$(PROJECT).app + $(verbose) : + +# Source files. + +ALL_SRC_FILES := $(sort $(call core_find,src/,*)) + +ERL_FILES := $(filter %.erl,$(ALL_SRC_FILES)) +CORE_FILES := $(filter %.core,$(ALL_SRC_FILES)) + +# ASN.1 files. + +ifneq ($(wildcard asn1/),) +ASN1_FILES = $(sort $(call core_find,asn1/,*.asn1)) +ERL_FILES += $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +define compile_asn1 + $(verbose) mkdir -p include/ + $(asn1_verbose) erlc -v -I include/ -o asn1/ +noobj $(ERLC_ASN1_OPTS) $(1) + $(verbose) mv asn1/*.erl src/ + $(verbose) mv asn1/*.hrl include/ + $(verbose) mv asn1/*.asn1db include/ +endef + +$(PROJECT).d:: $(ASN1_FILES) + $(if $(strip $?),$(call compile_asn1,$?)) +endif + +# SNMP MIB files. + +ifneq ($(wildcard mibs/),) +MIB_FILES = $(sort $(call core_find,mibs/,*.mib)) + +$(PROJECT).d:: $(COMPILE_MIB_FIRST_PATHS) $(MIB_FILES) + $(verbose) mkdir -p include/ priv/mibs/ + $(mib_verbose) erlc -v $(ERLC_MIB_OPTS) -o priv/mibs/ -I priv/mibs/ $? + $(mib_verbose) erlc -o include/ -- $(addprefix priv/mibs/,$(patsubst %.mib,%.bin,$(notdir $?))) +endif + +# Leex and Yecc files. + +XRL_FILES := $(filter %.xrl,$(ALL_SRC_FILES)) +XRL_ERL_FILES = $(addprefix src/,$(patsubst %.xrl,%.erl,$(notdir $(XRL_FILES)))) +ERL_FILES += $(XRL_ERL_FILES) + +YRL_FILES := $(filter %.yrl,$(ALL_SRC_FILES)) +YRL_ERL_FILES = $(addprefix src/,$(patsubst %.yrl,%.erl,$(notdir $(YRL_FILES)))) +ERL_FILES += $(YRL_ERL_FILES) + +$(PROJECT).d:: $(XRL_FILES) $(YRL_FILES) + $(if $(strip $?),$(xyrl_verbose) erlc -v -o src/ $(YRL_ERLC_OPTS) $?) + +# Erlang and Core Erlang files. + +define makedep.erl + E = ets:new(makedep, [bag]), + G = digraph:new([acyclic]), + ErlFiles = lists:usort(string:tokens("$(ERL_FILES)", " ")), + DepsDir = "$(call core_native_path,$(DEPS_DIR))", + AppsDir = "$(call core_native_path,$(APPS_DIR))", + DepsDirsSrc = "$(if $(wildcard $(DEPS_DIR)/*/src), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/src)))", + DepsDirsInc = "$(if $(wildcard $(DEPS_DIR)/*/include), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/include)))", + AppsDirsSrc = "$(if $(wildcard $(APPS_DIR)/*/src), $(call core_native_path,$(wildcard $(APPS_DIR)/*/src)))", + AppsDirsInc = "$(if $(wildcard $(APPS_DIR)/*/include), $(call core_native_path,$(wildcard $(APPS_DIR)/*/include)))", + DepsDirs = lists:usort(string:tokens(DepsDirsSrc++DepsDirsInc, " ")), + AppsDirs = lists:usort(string:tokens(AppsDirsSrc++AppsDirsInc, " ")), + Modules = [{list_to_atom(filename:basename(F, ".erl")), F} || F <- ErlFiles], + Add = fun (Mod, Dep) -> + case lists:keyfind(Dep, 1, Modules) of + false -> ok; + {_, DepFile} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + ets:insert(E, {ModFile, DepFile}), + digraph:add_vertex(G, Mod), + digraph:add_vertex(G, Dep), + digraph:add_edge(G, Mod, Dep) + end + end, + AddHd = fun (F, Mod, DepFile) -> + case file:open(DepFile, [read]) of + {error, enoent} -> + ok; + {ok, Fd} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + case ets:match(E, {ModFile, DepFile}) of + [] -> + ets:insert(E, {ModFile, DepFile}), + F(F, Fd, Mod,0); + _ -> ok + end + end + end, + SearchHrl = fun + F(_Hrl, []) -> {error,enoent}; + F(Hrl, [Dir|Dirs]) -> + HrlF = filename:join([Dir,Hrl]), + case filelib:is_file(HrlF) of + true -> + {ok, HrlF}; + false -> F(Hrl,Dirs) + end + end, + Attr = fun + (_F, Mod, behavior, Dep) -> + Add(Mod, Dep); + (_F, Mod, behaviour, Dep) -> + Add(Mod, Dep); + (_F, Mod, compile, {parse_transform, Dep}) -> + Add(Mod, Dep); + (_F, Mod, compile, Opts) when is_list(Opts) -> + case proplists:get_value(parse_transform, Opts) of + undefined -> ok; + Dep -> Add(Mod, Dep) + end; + (F, Mod, include, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, include_lib, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, import, {Imp, _}) -> + IsFile = + case lists:keyfind(Imp, 1, Modules) of + false -> false; + {_, FilePath} -> filelib:is_file(FilePath) + end, + case IsFile of + false -> ok; + true -> Add(Mod, Imp) + end; + (_, _, _, _) -> ok + end, + MakeDepend = fun + (F, Fd, Mod, StartLocation) -> + {ok, Filename} = file:pid2name(Fd), + case io:parse_erl_form(Fd, undefined, StartLocation) of + {ok, AbsData, EndLocation} -> + case AbsData of + {attribute, _, Key, Value} -> + Attr(F, Mod, Key, Value), + F(F, Fd, Mod, EndLocation); + _ -> F(F, Fd, Mod, EndLocation) + end; + {eof, _ } -> file:close(Fd); + {error, ErrorDescription } -> + file:close(Fd); + {error, ErrorInfo, ErrorLocation} -> + F(F, Fd, Mod, ErrorLocation) + end, + ok + end, + [begin + Mod = list_to_atom(filename:basename(F, ".erl")), + {ok, Fd} = file:open(F, [read]), + MakeDepend(MakeDepend, Fd, Mod,0) + end || F <- ErlFiles], + Depend = sofs:to_external(sofs:relation_to_family(sofs:relation(ets:tab2list(E)))), + CompileFirst = [X || X <- lists:reverse(digraph_utils:topsort(G)), [] =/= digraph:in_neighbours(G, X)], + TargetPath = fun(Target) -> + case lists:keyfind(Target, 1, Modules) of + false -> ""; + {_, DepFile} -> + DirSubname = tl(string:tokens(filename:dirname(DepFile), "/")), + string:join(DirSubname ++ [atom_to_list(Target)], "/") + end + end, + ok = file:write_file("$(1)", [ + [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], + "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" + ]), + halt() +endef + +ifeq ($(if $(NO_MAKEDEP),$(wildcard $(PROJECT).d),),) +$(PROJECT).d:: $(ERL_FILES) $(call core_find,include/,*.hrl) $(MAKEFILE_LIST) + $(makedep_verbose) $(call erlang,$(call makedep.erl,$@)) +endif + +ifneq ($(words $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES)),0) +# Rebuild everything when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change: $(MAKEFILE_LIST) + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) if test -f $@; then \ + touch $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES); \ + touch -c $(PROJECT).d; \ + fi + $(verbose) touch $@ + +$(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES):: $(ERLANG_MK_TMP)/last-makefile-change +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change +endif + +include $(wildcard $(PROJECT).d) + +ebin/$(PROJECT).app:: ebin/ + +ebin/: + $(verbose) mkdir -p ebin/ + +define compile_erl + $(erlc_verbose) erlc -v $(if $(IS_DEP),$(filter-out -Werror,$(ERLC_OPTS)),$(ERLC_OPTS)) -o ebin/ \ + -pa ebin/ -I include/ $(filter-out $(ERLC_EXCLUDE_PATHS),$(COMPILE_FIRST_PATHS) $(1)) +endef + +ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES) $(wildcard src/$(PROJECT).app.src) + $(eval FILES_TO_COMPILE := $(filter-out src/$(PROJECT).app.src,$?)) + $(if $(strip $(FILES_TO_COMPILE)),$(call compile_erl,$(FILES_TO_COMPILE))) + $(eval GITDESCRIBE := $(shell git describe --dirty --abbrev=7 --tags --always --first-parent 2>/dev/null || true)) + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(filter-out $(ERLC_EXCLUDE_PATHS),$(ERL_FILES) $(CORE_FILES) $(BEAM_FILES))))))) +ifeq ($(wildcard src/$(PROJECT).app.src),) + $(app_verbose) printf '$(subst %,%%,$(subst $(newline),\n,$(subst ','\'',$(call app_file,$(GITDESCRIBE),$(MODULES)))))' \ + > ebin/$(PROJECT).app +else + $(verbose) if [ -z "$$(grep -e '^[^%]*{\s*modules\s*,' src/$(PROJECT).app.src)" ]; then \ + echo "Empty modules entry not found in $(PROJECT).app.src. Please consult the erlang.mk README for instructions." >&2; \ + exit 1; \ + fi + $(appsrc_verbose) cat src/$(PROJECT).app.src \ + | sed "s/{[[:space:]]*modules[[:space:]]*,[[:space:]]*\[\]}/{modules, \[$(call comma_list,$(MODULES))\]}/" \ + | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ + > ebin/$(PROJECT).app +endif + +clean:: clean-app + +clean-app: + $(gen_verbose) rm -rf $(PROJECT).d ebin/ priv/mibs/ $(XRL_ERL_FILES) $(YRL_ERL_FILES) \ + $(addprefix include/,$(patsubst %.mib,%.hrl,$(notdir $(MIB_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.hrl,$(notdir $(ASN1_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.asn1db,$(notdir $(ASN1_FILES)))) \ + $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: docs-deps + +# Configuration. + +ALL_DOC_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(DOC_DEPS)) + +# Targets. + +$(foreach dep,$(DOC_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +doc-deps: +else +doc-deps: $(ALL_DOC_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rel-deps + +# Configuration. + +ALL_REL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(REL_DEPS)) + +# Targets. + +$(foreach dep,$(REL_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +rel-deps: +else +rel-deps: $(ALL_REL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_REL_DEPS_DIRS) ; do $(MAKE) -C $$dep; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: test-deps test-dir test-build clean-test-dir + +# Configuration. + +TEST_DIR ?= $(CURDIR)/test + +ALL_TEST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(TEST_DEPS)) + +TEST_ERLC_OPTS ?= +debug_info +warn_export_vars +warn_shadow_vars +warn_obsolete_guard +TEST_ERLC_OPTS += -DTEST=1 + +# Targets. + +$(foreach dep,$(TEST_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +test-deps: +else +test-deps: $(ALL_TEST_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_TEST_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done +endif + +ifneq ($(wildcard $(TEST_DIR)),) +test-dir: + $(gen_verbose) erlc -v $(TEST_ERLC_OPTS) -I include/ -o $(TEST_DIR) \ + $(call core_find,$(TEST_DIR)/,*.erl) -pa ebin/ +endif + +ifeq ($(wildcard src),) +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: clean deps test-deps + $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +else +ifeq ($(wildcard ebin/test),) +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: clean deps test-deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(gen_verbose) touch ebin/test +else +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: deps test-deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +endif + +clean:: clean-test-dir + +clean-test-dir: +ifneq ($(wildcard $(TEST_DIR)/*.beam),) + $(gen_verbose) rm -f $(TEST_DIR)/*.beam +endif +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rebar.config + +# We strip out -Werror because we don't want to fail due to +# warnings when used as a dependency. + +compat_prepare_erlc_opts = $(shell echo "$1" | sed 's/, */,/g') + +define compat_convert_erlc_opts +$(if $(filter-out -Werror,$1),\ + $(if $(findstring +,$1),\ + $(shell echo $1 | cut -b 2-))) +endef + +define compat_erlc_opts_to_list +[$(call comma_list,$(foreach o,$(call compat_prepare_erlc_opts,$1),$(call compat_convert_erlc_opts,$o)))] +endef + +define compat_rebar_config +{deps, [ +$(call comma_list,$(foreach d,$(DEPS),\ + $(if $(filter hex,$(call dep_fetch,$d)),\ + {$(call dep_name,$d)$(comma)"$(call dep_repo,$d)"},\ + {$(call dep_name,$d)$(comma)".*"$(comma){git,"$(call dep_repo,$d)"$(comma)"$(call dep_commit,$d)"}}))) +]}. +{erl_opts, $(call compat_erlc_opts_to_list,$(ERLC_OPTS))}. +endef + +$(eval _compat_rebar_config = $$(compat_rebar_config)) +$(eval export _compat_rebar_config) + +rebar.config: + $(gen_verbose) echo "$${_compat_rebar_config}" > rebar.config + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter asciideck,$(DEPS) $(DOC_DEPS)),asciideck) + +.PHONY: asciidoc asciidoc-guide asciidoc-manual install-asciidoc distclean-asciidoc-guide distclean-asciidoc-manual + +# Core targets. + +docs:: asciidoc + +distclean:: distclean-asciidoc-guide distclean-asciidoc-manual + +# Plugin-specific targets. + +asciidoc: asciidoc-guide asciidoc-manual + +# User guide. + +ifeq ($(wildcard doc/src/guide/book.asciidoc),) +asciidoc-guide: +else +asciidoc-guide: distclean-asciidoc-guide doc-deps + a2x -v -f pdf doc/src/guide/book.asciidoc && mv doc/src/guide/book.pdf doc/guide.pdf + a2x -v -f chunked doc/src/guide/book.asciidoc && mv doc/src/guide/book.chunked/ doc/html/ + +distclean-asciidoc-guide: + $(gen_verbose) rm -rf doc/html/ doc/guide.pdf +endif + +# Man pages. + +ASCIIDOC_MANUAL_FILES := $(wildcard doc/src/manual/*.asciidoc) + +ifeq ($(ASCIIDOC_MANUAL_FILES),) +asciidoc-manual: +else + +# Configuration. + +MAN_INSTALL_PATH ?= /usr/local/share/man +MAN_SECTIONS ?= 3 7 +MAN_PROJECT ?= $(shell echo $(PROJECT) | sed 's/^./\U&\E/') +MAN_VERSION ?= $(PROJECT_VERSION) + +# Plugin-specific targets. + +define asciidoc2man.erl +try + [begin + io:format(" ADOC ~s~n", [F]), + ok = asciideck:to_manpage(asciideck:parse_file(F), #{ + compress => gzip, + outdir => filename:dirname(F), + extra2 => "$(MAN_PROJECT) $(MAN_VERSION)", + extra3 => "$(MAN_PROJECT) Function Reference" + }) + end || F <- [$(shell echo $(addprefix $(comma)\",$(addsuffix \",$1)) | sed 's/^.//')]], + halt(0) +catch C:E -> + io:format("Exception ~p:~p~nStacktrace: ~p~n", [C, E, erlang:get_stacktrace()]), + halt(1) +end. +endef + +asciidoc-manual:: doc-deps + +asciidoc-manual:: $(ASCIIDOC_MANUAL_FILES) + $(call erlang,$(call asciidoc2man.erl,$?)) + $(foreach s,$(MAN_SECTIONS),mkdir -p doc/man$s/ && mv doc/src/manual/*.$s.gz doc/man$s/;) + +install-docs:: install-asciidoc + +install-asciidoc: asciidoc-manual + $(foreach s,$(MAN_SECTIONS),\ + mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \ + install -g `id -g` -o `id -u` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;) + +distclean-asciidoc-manual: + $(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS)) +endif +endif + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: bootstrap bootstrap-lib bootstrap-rel new list-templates + +# Core targets. + +help:: + $(verbose) printf "%s\n" "" \ + "Bootstrap targets:" \ + " bootstrap Generate a skeleton of an OTP application" \ + " bootstrap-lib Generate a skeleton of an OTP library" \ + " bootstrap-rel Generate the files needed to build a release" \ + " new-app in=NAME Create a new local OTP application NAME" \ + " new-lib in=NAME Create a new local OTP library NAME" \ + " new t=TPL n=NAME Generate a module NAME based on the template TPL" \ + " new t=T n=N in=APP Generate a module NAME based on the template TPL in APP" \ + " list-templates List available templates" + +# Bootstrap templates. + +define bs_appsrc +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]}, + {mod, {$p_app, []}}, + {env, []} +]}. +endef + +define bs_appsrc_lib +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]} +]}. +endef + +# To prevent autocompletion issues with ZSH, we add "include erlang.mk" +# separately during the actual bootstrap. +ifdef SP +define bs_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +# Whitespace to be used when creating files from templates. +SP = $(SP) + +endef +else +define bs_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +endef +endif + +define bs_apps_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +include $(call core_relpath,$(dir $(ERLANG_MK_FILENAME)),$(APPS_DIR)/app)/erlang.mk +endef + +define bs_app +-module($p_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + $p_sup:start_link(). + +stop(_State) -> + ok. +endef + +define bs_relx_config +{release, {$p_release, "1"}, [$p, sasl, runtime_tools]}. +{extended_start_script, true}. +{sys_config, "rel/sys.config"}. +{vm_args, "rel/vm.args"}. +endef + +define bs_sys_config +[ +]. +endef + +define bs_vm_args +-name $p@127.0.0.1 +-setcookie $p +-heart +endef + +# Normal templates. + +define tpl_supervisor +-module($(n)). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + Procs = [], + {ok, {{one_for_one, 1, 5}, Procs}}. +endef + +define tpl_gen_server +-module($(n)). +-behaviour(gen_server). + +%% API. +-export([start_link/0]). + +%% gen_server. +-export([init/1]). +-export([handle_call/3]). +-export([handle_cast/2]). +-export([handle_info/2]). +-export([terminate/2]). +-export([code_change/3]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_server:start_link(?MODULE, [], []). + +%% gen_server. + +init([]) -> + {ok, #state{}}. + +handle_call(_Request, _From, State) -> + {reply, ignored, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. +endef + +define tpl_module +-module($(n)). +-export([]). +endef + +define tpl_cowboy_http +-module($(n)). +-behaviour(cowboy_http_handler). + +-export([init/3]). +-export([handle/2]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {ok, Req, #state{}}. + +handle(Req, State=#state{}) -> + {ok, Req2} = cowboy_req:reply(200, Req), + {ok, Req2, State}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_gen_fsm +-module($(n)). +-behaviour(gen_fsm). + +%% API. +-export([start_link/0]). + +%% gen_fsm. +-export([init/1]). +-export([state_name/2]). +-export([handle_event/3]). +-export([state_name/3]). +-export([handle_sync_event/4]). +-export([handle_info/3]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_fsm:start_link(?MODULE, [], []). + +%% gen_fsm. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_Event, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_Event, StateName, StateData) -> + {next_state, StateName, StateData}. + +state_name(_Event, _From, StateData) -> + {reply, ignored, state_name, StateData}. + +handle_sync_event(_Event, _From, StateName, StateData) -> + {reply, ignored, StateName, StateData}. + +handle_info(_Info, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_gen_statem +-module($(n)). +-behaviour(gen_statem). + +%% API. +-export([start_link/0]). + +%% gen_statem. +-export([callback_mode/0]). +-export([init/1]). +-export([state_name/3]). +-export([handle_event/4]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_statem:start_link(?MODULE, [], []). + +%% gen_statem. + +callback_mode() -> + state_functions. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_EventType, _EventData, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_EventType, _EventData, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_cowboy_loop +-module($(n)). +-behaviour(cowboy_loop_handler). + +-export([init/3]). +-export([info/3]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {loop, Req, #state{}, 5000, hibernate}. + +info(_Info, Req, State) -> + {loop, Req, State, hibernate}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_cowboy_rest +-module($(n)). + +-export([init/3]). +-export([content_types_provided/2]). +-export([get_html/2]). + +init(_, _Req, _Opts) -> + {upgrade, protocol, cowboy_rest}. + +content_types_provided(Req, State) -> + {[{{<<"text">>, <<"html">>, '*'}, get_html}], Req, State}. + +get_html(Req, State) -> + {<<"This is REST!">>, Req, State}. +endef + +define tpl_cowboy_ws +-module($(n)). +-behaviour(cowboy_websocket_handler). + +-export([init/3]). +-export([websocket_init/3]). +-export([websocket_handle/3]). +-export([websocket_info/3]). +-export([websocket_terminate/3]). + +-record(state, { +}). + +init(_, _, _) -> + {upgrade, protocol, cowboy_websocket}. + +websocket_init(_, Req, _Opts) -> + Req2 = cowboy_req:compact(Req), + {ok, Req2, #state{}}. + +websocket_handle({text, Data}, Req, State) -> + {reply, {text, Data}, Req, State}; +websocket_handle({binary, Data}, Req, State) -> + {reply, {binary, Data}, Req, State}; +websocket_handle(_Frame, Req, State) -> + {ok, Req, State}. + +websocket_info(_Info, Req, State) -> + {ok, Req, State}. + +websocket_terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_ranch_protocol +-module($(n)). +-behaviour(ranch_protocol). + +-export([start_link/4]). +-export([init/4]). + +-type opts() :: []. +-export_type([opts/0]). + +-record(state, { + socket :: inet:socket(), + transport :: module() +}). + +start_link(Ref, Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), + {ok, Pid}. + +-spec init(ranch:ref(), inet:socket(), module(), opts()) -> ok. +init(Ref, Socket, Transport, _Opts) -> + ok = ranch:accept_ack(Ref), + loop(#state{socket=Socket, transport=Transport}). + +loop(State) -> + loop(State). +endef + +# Plugin-specific targets. + +define render_template + $(verbose) printf -- '$(subst $(newline),\n,$(subst %,%%,$(subst ','\'',$(subst $(tab),$(WS),$(call $(1))))))\n' > $(2) +endef + +ifndef WS +ifdef SP +WS = $(subst a,,a $(wordlist 1,$(SP),a a a a a a a a a a a a a a a a a a a a)) +else +WS = $(tab) +endif +endif + +bootstrap: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(eval n := $(PROJECT)_sup) + $(call render_template,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(call render_template,bs_appsrc,src/$(PROJECT).app.src) +endif + $(call render_template,bs_app,src/$(PROJECT)_app.erl) + $(call render_template,tpl_supervisor,src/$(PROJECT)_sup.erl) + +bootstrap-lib: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(call render_template,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(call render_template,bs_appsrc_lib,src/$(PROJECT).app.src) +endif + +bootstrap-rel: +ifneq ($(wildcard relx.config),) + $(error Error: relx.config already exists) +endif +ifneq ($(wildcard rel/),) + $(error Error: rel/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(call render_template,bs_relx_config,relx.config) + $(verbose) mkdir rel/ + $(call render_template,bs_sys_config,rel/sys.config) + $(call render_template,bs_vm_args,rel/vm.args) + +new-app: +ifndef in + $(error Usage: $(MAKE) new-app in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(eval n := $(in)_sup) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(call render_template,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(call render_template,bs_appsrc,$(APPS_DIR)/$p/src/$p.app.src) +endif + $(call render_template,bs_app,$(APPS_DIR)/$p/src/$p_app.erl) + $(call render_template,tpl_supervisor,$(APPS_DIR)/$p/src/$p_sup.erl) + +new-lib: +ifndef in + $(error Usage: $(MAKE) new-lib in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(call render_template,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(call render_template,bs_appsrc_lib,$(APPS_DIR)/$p/src/$p.app.src) +endif + +new: +ifeq ($(wildcard src/)$(in),) + $(error Error: src/ directory does not exist) +endif +ifndef t + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifndef n + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifdef in + $(call render_template,tpl_$(t),$(APPS_DIR)/$(in)/src/$(n).erl) +else + $(call render_template,tpl_$(t),src/$(n).erl) +endif + +list-templates: + $(verbose) @echo Available templates: + $(verbose) printf " %s\n" $(sort $(patsubst tpl_%,%,$(filter tpl_%,$(.VARIABLES)))) + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-c_src distclean-c_src-env + +# Configuration. + +C_SRC_DIR ?= $(CURDIR)/c_src +C_SRC_ENV ?= $(C_SRC_DIR)/env.mk +C_SRC_OUTPUT ?= $(CURDIR)/priv/$(PROJECT) +C_SRC_TYPE ?= shared + +# System type and C compiler/flags. + +ifeq ($(PLATFORM),msys2) + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= .exe + C_SRC_OUTPUT_SHARED_EXTENSION ?= .dll +else + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= + C_SRC_OUTPUT_SHARED_EXTENSION ?= .so +endif + +ifeq ($(C_SRC_TYPE),shared) + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_SHARED_EXTENSION) +else + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_EXECUTABLE_EXTENSION) +endif + +ifeq ($(PLATFORM),msys2) +# We hardcode the compiler used on MSYS2. The default CC=cc does +# not produce working code. The "gcc" MSYS2 package also doesn't. + CC = /mingw64/bin/gcc + export CC + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),darwin) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -arch x86_64 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -arch x86_64 -finline-functions -Wall + LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress +else ifeq ($(PLATFORM),freebsd) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),linux) + CC ?= gcc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +endif + +ifneq ($(PLATFORM),msys2) + CFLAGS += -fPIC + CXXFLAGS += -fPIC +endif + +CFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" +CXXFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" + +LDLIBS += -L"$(ERL_INTERFACE_LIB_DIR)" -lerl_interface -lei + +# Verbosity. + +c_verbose_0 = @echo " C " $(?F); +c_verbose = $(c_verbose_$(V)) + +cpp_verbose_0 = @echo " CPP " $(?F); +cpp_verbose = $(cpp_verbose_$(V)) + +link_verbose_0 = @echo " LD " $(@F); +link_verbose = $(link_verbose_$(V)) + +# Targets. + +ifeq ($(wildcard $(C_SRC_DIR)),) +else ifneq ($(wildcard $(C_SRC_DIR)/Makefile),) +app:: app-c_src + +test-build:: app-c_src + +app-c_src: + $(MAKE) -C $(C_SRC_DIR) + +clean:: + $(MAKE) -C $(C_SRC_DIR) clean + +else + +ifeq ($(SOURCES),) +SOURCES := $(sort $(foreach pat,*.c *.C *.cc *.cpp,$(call core_find,$(C_SRC_DIR)/,$(pat)))) +endif +OBJECTS = $(addsuffix .o, $(basename $(SOURCES))) + +COMPILE_C = $(c_verbose) $(CC) $(CFLAGS) $(CPPFLAGS) -c +COMPILE_CPP = $(cpp_verbose) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c + +app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +$(C_SRC_OUTPUT_FILE): $(OBJECTS) + $(verbose) mkdir -p priv/ + $(link_verbose) $(CC) $(OBJECTS) \ + $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ + -o $(C_SRC_OUTPUT_FILE) + +%.o: %.c + $(COMPILE_C) $(OUTPUT_OPTION) $< + +%.o: %.cc + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.C + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.cpp + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +clean:: clean-c_src + +clean-c_src: + $(gen_verbose) rm -f $(C_SRC_OUTPUT_FILE) $(OBJECTS) + +endif + +ifneq ($(wildcard $(C_SRC_DIR)),) +$(C_SRC_ENV): + $(verbose) $(ERL) -eval "file:write_file(\"$(call core_native_path,$(C_SRC_ENV))\", \ + io_lib:format( \ + \"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \ + \"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \ + \"ERL_INTERFACE_LIB_DIR ?= ~s~n\", \ + [code:root_dir(), erlang:system_info(version), \ + code:lib_dir(erl_interface, include), \ + code:lib_dir(erl_interface, lib)])), \ + halt()." + +distclean:: distclean-c_src-env + +distclean-c_src-env: + $(gen_verbose) rm -f $(C_SRC_ENV) + +-include $(C_SRC_ENV) +endif + +# Templates. + +define bs_c_nif +#include "erl_nif.h" + +static int loads = 0; + +static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) +{ + /* Initialize private data. */ + *priv_data = NULL; + + loads++; + + return 0; +} + +static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info) +{ + /* Convert the private data to the new version. */ + *priv_data = *old_priv_data; + + loads++; + + return 0; +} + +static void unload(ErlNifEnv* env, void* priv_data) +{ + if (loads == 1) { + /* Destroy the private data. */ + } + + loads--; +} + +static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + if (enif_is_atom(env, argv[0])) { + return enif_make_tuple2(env, + enif_make_atom(env, "hello"), + argv[0]); + } + + return enif_make_tuple2(env, + enif_make_atom(env, "error"), + enif_make_atom(env, "badarg")); +} + +static ErlNifFunc nif_funcs[] = { + {"hello", 1, hello} +}; + +ERL_NIF_INIT($n, nif_funcs, load, NULL, upgrade, unload) +endef + +define bs_erl_nif +-module($n). + +-export([hello/1]). + +-on_load(on_load/0). +on_load() -> + PrivDir = case code:priv_dir(?MODULE) of + {error, _} -> + AppPath = filename:dirname(filename:dirname(code:which(?MODULE))), + filename:join(AppPath, "priv"); + Path -> + Path + end, + erlang:load_nif(filename:join(PrivDir, atom_to_list(?MODULE)), 0). + +hello(_) -> + erlang:nif_error({not_loaded, ?MODULE}). +endef + +new-nif: +ifneq ($(wildcard $(C_SRC_DIR)/$n.c),) + $(error Error: $(C_SRC_DIR)/$n.c already exists) +endif +ifneq ($(wildcard src/$n.erl),) + $(error Error: src/$n.erl already exists) +endif +ifdef in + $(verbose) $(MAKE) -C $(APPS_DIR)/$(in)/ new-nif n=$n in= +else + $(verbose) mkdir -p $(C_SRC_DIR) src/ + $(call render_template,bs_c_nif,$(C_SRC_DIR)/$n.c) + $(call render_template,bs_erl_nif,src/$n.erl) +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ci ci-prepare ci-setup + +CI_OTP ?= +CI_HIPE ?= +CI_ERLLVM ?= + +ifeq ($(CI_VM),native) +ERLC_OPTS += +native +TEST_ERLC_OPTS += +native +else ifeq ($(CI_VM),erllvm) +ERLC_OPTS += +native +'{hipe, [to_llvm]}' +TEST_ERLC_OPTS += +native +'{hipe, [to_llvm]}' +endif + +ifeq ($(strip $(CI_OTP) $(CI_HIPE) $(CI_ERLLVM)),) +ci:: +else + +ci:: $(addprefix ci-,$(CI_OTP) $(addsuffix -native,$(CI_HIPE)) $(addsuffix -erllvm,$(CI_ERLLVM))) + +ci-prepare: $(addprefix $(KERL_INSTALL_DIR)/,$(CI_OTP) $(addsuffix -native,$(CI_HIPE))) + +ci-setup:: + +ci-extra:: + +ci_verbose_0 = @echo " CI " $(1); +ci_verbose = $(ci_verbose_$(V)) + +define ci_target +ci-$1: $(KERL_INSTALL_DIR)/$2 + $(verbose) $(MAKE) --no-print-directory clean distclean-c_src-env + $(ci_verbose) \ + PATH="$(KERL_INSTALL_DIR)/$2/bin:$(PATH)" \ + CI_OTP_RELEASE="$1" \ + CT_OPTS="-label $1" \ + CI_VM="$3" \ + $(MAKE) ci-setup tests + $(verbose) $(MAKE) --no-print-directory ci-extra +endef + +$(foreach otp,$(CI_OTP),$(eval $(call ci_target,$(otp),$(otp),otp))) +$(foreach otp,$(CI_HIPE),$(eval $(call ci_target,$(otp)-native,$(otp)-native,native))) +$(foreach otp,$(CI_ERLLVM),$(eval $(call ci_target,$(otp)-erllvm,$(otp)-native,erllvm))) + +$(foreach otp,$(CI_OTP),$(eval $(call kerl_otp_target,$(otp)))) +$(foreach otp,$(sort $(CI_HIPE) $(CI_ERLLLVM)),$(eval $(call kerl_hipe_target,$(otp)))) + +help:: + $(verbose) printf "%s\n" "" \ + "Continuous Integration targets:" \ + " ci Run '$(MAKE) tests' on all configured Erlang versions." \ + "" \ + "The CI_OTP variable must be defined with the Erlang versions" \ + "that must be tested. For example: CI_OTP = OTP-17.3.4 OTP-17.5.3" + +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ct apps-ct distclean-ct + +# Configuration. + +CT_OPTS ?= + +ifneq ($(wildcard $(TEST_DIR)),) +ifndef CT_SUITES +CT_SUITES := $(sort $(subst _SUITE.erl,,$(notdir $(call core_find,$(TEST_DIR)/,*_SUITE.erl)))) +endif +endif +CT_SUITES ?= +CT_LOGS_DIR ?= $(CURDIR)/logs + +# Core targets. + +tests:: ct + +distclean:: distclean-ct + +help:: + $(verbose) printf "%s\n" "" \ + "Common_test targets:" \ + " ct Run all the common_test suites for this project" \ + "" \ + "All your common_test suites have their associated targets." \ + "A suite named http_SUITE can be ran using the ct-http target." + +# Plugin-specific targets. + +CT_RUN = ct_run \ + -no_auto_compile \ + -noinput \ + -pa $(CURDIR)/ebin $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(TEST_DIR) \ + -dir $(TEST_DIR) \ + -logdir $(CT_LOGS_DIR) + +ifeq ($(CT_SUITES),) +ct: $(if $(IS_APP),,apps-ct) +else +# We do not run tests if we are in an apps/* with no test directory. +ifneq ($(IS_APP)$(wildcard $(TEST_DIR)),1) +ct: test-build $(if $(IS_APP),,apps-ct) + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(CT_SUITES)) $(CT_OPTS) +endif +endif + +ifneq ($(ALL_APPS_DIRS),) +define ct_app_target +apps-ct-$1: + $(MAKE) -C $1 ct IS_APP=1 +endef + +$(foreach app,$(ALL_APPS_DIRS),$(eval $(call ct_app_target,$(app)))) + +apps-ct: test-build $(addprefix apps-ct-,$(ALL_APPS_DIRS)) +endif + +ifndef t +CT_EXTRA = +else +ifeq (,$(findstring :,$t)) +CT_EXTRA = -group $t +else +t_words = $(subst :, ,$t) +CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words)) +endif +endif + +define ct_suite_target +ct-$(1): test-build + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(1)) $(CT_EXTRA) $(CT_OPTS) +endef + +$(foreach test,$(CT_SUITES),$(eval $(call ct_suite_target,$(test)))) + +distclean-ct: + $(gen_verbose) rm -rf $(CT_LOGS_DIR) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: plt distclean-plt dialyze + +# Configuration. + +DIALYZER_PLT ?= $(CURDIR)/.$(PROJECT).plt +export DIALYZER_PLT + +PLT_APPS ?= +DIALYZER_DIRS ?= --src -r $(wildcard src) $(ALL_APPS_DIRS) +DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs +DIALYZER_PLT_OPTS ?= + +# Core targets. + +check:: dialyze + +distclean:: distclean-plt + +help:: + $(verbose) printf "%s\n" "" \ + "Dialyzer targets:" \ + " plt Build a PLT file for this project" \ + " dialyze Analyze the project using Dialyzer" + +# Plugin-specific targets. + +define filter_opts.erl + Opts = init:get_plain_arguments(), + {Filtered, _} = lists:foldl(fun + (O, {Os, true}) -> {[O|Os], false}; + (O = "-D", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$D, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-I", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$I, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-pa", {Os, _}) -> {[O|Os], true}; + (_, Acc) -> Acc + end, {[], false}, Opts), + io:format("~s~n", [string:join(lists:reverse(Filtered), " ")]), + halt(). +endef + +$(DIALYZER_PLT): deps app + $(eval DEPS_LOG := $(shell test -f $(ERLANG_MK_TMP)/deps.log && \ + while read p; do test -d $$p/ebin && echo $$p/ebin; done <$(ERLANG_MK_TMP)/deps.log)) + $(verbose) dialyzer --build_plt $(DIALYZER_PLT_OPTS) --apps \ + erts kernel stdlib $(PLT_APPS) $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS_LOG) || test $$? -eq 2 + +plt: $(DIALYZER_PLT) + +distclean-plt: + $(gen_verbose) rm -f $(DIALYZER_PLT) + +ifneq ($(wildcard $(DIALYZER_PLT)),) +dialyze: +else +dialyze: $(DIALYZER_PLT) +endif + $(verbose) dialyzer --no_native `$(ERL) -eval "$(subst $(newline),,$(call escape_dquotes,$(call filter_opts.erl)))" -extra $(ERLC_OPTS)` $(DIALYZER_DIRS) $(DIALYZER_OPTS) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-edoc edoc + +# Configuration. + +EDOC_OPTS ?= +EDOC_SRC_DIRS ?= +EDOC_OUTPUT ?= doc + +define edoc.erl + SrcPaths = lists:foldl(fun(P, Acc) -> + filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc + end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]), + DefaultOpts = [{dir, "$(EDOC_OUTPUT)"}, {source_path, SrcPaths}, {subpackages, false}], + edoc:application($(1), ".", [$(2)] ++ DefaultOpts), + halt(0). +endef + +# Core targets. + +ifneq ($(strip $(EDOC_SRC_DIRS)$(wildcard doc/overview.edoc)),) +docs:: edoc +endif + +distclean:: distclean-edoc + +# Plugin-specific targets. + +edoc: distclean-edoc doc-deps + $(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS))) + +distclean-edoc: + $(gen_verbose) rm -f $(EDOC_OUTPUT)/*.css $(EDOC_OUTPUT)/*.html $(EDOC_OUTPUT)/*.png $(EDOC_OUTPUT)/edoc-info + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Configuration. + +DTL_FULL_PATH ?= +DTL_PATH ?= templates/ +DTL_SUFFIX ?= _dtl +DTL_OPTS ?= + +# Verbosity. + +dtl_verbose_0 = @echo " DTL " $(filter %.dtl,$(?F)); +dtl_verbose = $(dtl_verbose_$(V)) + +# Core targets. + +DTL_PATH := $(abspath $(DTL_PATH)) +DTL_FILES := $(sort $(call core_find,$(DTL_PATH),*.dtl)) + +ifneq ($(DTL_FILES),) + +DTL_NAMES = $(addsuffix $(DTL_SUFFIX),$(DTL_FILES:$(DTL_PATH)/%.dtl=%)) +DTL_MODULES = $(if $(DTL_FULL_PATH),$(subst /,_,$(DTL_NAMES)),$(notdir $(DTL_NAMES))) +BEAM_FILES += $(addsuffix .beam,$(addprefix ebin/,$(DTL_MODULES))) + +ifneq ($(words $(DTL_FILES)),0) +# Rebuild templates when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change-erlydtl: $(MAKEFILE_LIST) + @mkdir -p $(ERLANG_MK_TMP) + @if test -f $@; then \ + touch $(DTL_FILES); \ + fi + @touch $@ + +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change-erlydtl +endif + +define erlydtl_compile.erl + [begin + Module0 = case "$(strip $(DTL_FULL_PATH))" of + "" -> + filename:basename(F, ".dtl"); + _ -> + "$(DTL_PATH)/" ++ F2 = filename:rootname(F, ".dtl"), + re:replace(F2, "/", "_", [{return, list}, global]) + end, + Module = list_to_atom(string:to_lower(Module0) ++ "$(DTL_SUFFIX)"), + case erlydtl:compile(F, Module, [$(DTL_OPTS)] ++ [{out_dir, "ebin/"}, return_errors]) of + ok -> ok; + {ok, _} -> ok + end + end || F <- string:tokens("$(1)", " ")], + halt(). +endef + +ebin/$(PROJECT).app:: $(DTL_FILES) | ebin/ + $(if $(strip $?),\ + $(dtl_verbose) $(call erlang,$(call erlydtl_compile.erl,$(call core_native_path,$?)),\ + -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/)) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2014, Dave Cottlehuber +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-escript escript escript-zip + +# Configuration. + +ESCRIPT_NAME ?= $(PROJECT) +ESCRIPT_FILE ?= $(ESCRIPT_NAME) + +ESCRIPT_SHEBANG ?= /usr/bin/env escript +ESCRIPT_COMMENT ?= This is an -*- erlang -*- file +ESCRIPT_EMU_ARGS ?= -escript main $(ESCRIPT_NAME) + +ESCRIPT_ZIP ?= 7z a -tzip -mx=9 -mtc=off $(if $(filter-out 0,$(V)),,> /dev/null) +ESCRIPT_ZIP_FILE ?= $(ERLANG_MK_TMP)/escript.zip + +# Core targets. + +distclean:: distclean-escript + +help:: + $(verbose) printf "%s\n" "" \ + "Escript targets:" \ + " escript Build an executable escript archive" \ + +# Plugin-specific targets. + +escript-zip:: deps app + $(verbose) mkdir -p $(dir $(ESCRIPT_ZIP)) + $(verbose) rm -f $(ESCRIPT_ZIP_FILE) + $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(PROJECT)/ebin/* +ifneq ($(DEPS),) + $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) \ + `cat $(ERLANG_MK_TMP)/deps.log | sed 's/^$(subst /,\/,$(DEPS_DIR))\///' | sed 's/$$/\/ebin\/\*/'` +endif + +escript:: escript-zip + $(gen_verbose) printf "%s\n" \ + "#!$(ESCRIPT_SHEBANG)" \ + "%% $(ESCRIPT_COMMENT)" \ + "%%! $(ESCRIPT_EMU_ARGS)" > $(ESCRIPT_FILE) + $(verbose) cat $(ESCRIPT_ZIP_FILE) >> $(ESCRIPT_FILE) + $(verbose) chmod +x $(ESCRIPT_FILE) + +distclean-escript: + $(gen_verbose) rm -f $(ESCRIPT_FILE) + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, Enrique Fernandez +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: eunit apps-eunit + +# Configuration + +EUNIT_OPTS ?= +EUNIT_ERL_OPTS ?= + +# Core targets. + +tests:: eunit + +help:: + $(verbose) printf "%s\n" "" \ + "EUnit targets:" \ + " eunit Run all the EUnit tests for this project" + +# Plugin-specific targets. + +define eunit.erl + Enabled = case "$(COVER)" of + "" -> false; + _ -> + case filelib:is_dir("ebin") of + false -> false; + true -> + case cover:compile_beam_directory("ebin") of + {error, _} -> halt(1); + _ -> true + end + end + end, + case eunit:test($1, [$(EUNIT_OPTS)]) of + ok -> ok; + error -> halt(2) + end, + case {Enabled, "$(COVER)"} of + {false, _} -> ok; + {_, ""} -> ok; + _ -> + cover:export("$(COVER_DATA_DIR)/eunit.coverdata") + end, + halt() +endef + +EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(CURDIR)/ebin + +ifdef t +ifeq (,$(findstring :,$(t))) +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS)) +else +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS)) +endif +else +EUNIT_EBIN_MODS = $(notdir $(basename $(ERL_FILES) $(BEAM_FILES))) +EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl))) + +EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \ + $(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)') + +eunit: test-build $(if $(IS_APP),,apps-eunit) cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS)) + +ifneq ($(ALL_APPS_DIRS),) +apps-eunit: + $(verbose) eunit_retcode=0 ; for app in $(ALL_APPS_DIRS); do $(MAKE) -C $$app eunit IS_APP=1; \ + [ $$? -ne 0 ] && eunit_retcode=1 ; done ; \ + exit $$eunit_retcode +endif +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter proper,$(DEPS) $(TEST_DEPS)),proper) +.PHONY: proper + +# Targets. + +tests:: proper + +define proper_check.erl + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + Module = fun(M) -> + [true] =:= lists:usort([ + case atom_to_list(F) of + "prop_" ++ _ -> + io:format("Testing ~p:~p/0~n", [M, F]), + proper:quickcheck(M:F(), nocolors); + _ -> + true + end + || {F, 0} <- M:module_info(exports)]) + end, + try + case $(1) of + all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]); + module -> Module($(2)); + function -> proper:quickcheck($(2), nocolors) + end + of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +proper: test-build + $(verbose) $(call erlang,$(call proper_check.erl,module,$(t))) +else +proper: test-build + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call proper_check.erl,function,$(t)())) +endif +else +proper: test-build + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call proper_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: relx-rel relx-relup distclean-relx-rel run + +# Configuration. + +RELX ?= $(ERLANG_MK_TMP)/relx +RELX_CONFIG ?= $(CURDIR)/relx.config + +RELX_URL ?= https://erlang.mk/res/relx-v3.26.0 +RELX_OPTS ?= +RELX_OUTPUT_DIR ?= _rel +RELX_REL_EXT ?= +RELX_TAR ?= 1 + +ifdef SFX + RELX_TAR = 1 +endif + +ifeq ($(firstword $(RELX_OPTS)),-o) + RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS)) +else + RELX_OPTS += -o $(RELX_OUTPUT_DIR) +endif + +# Core targets. + +ifeq ($(IS_DEP),) +ifneq ($(wildcard $(RELX_CONFIG)),) +rel:: relx-rel + +relup:: relx-relup +endif +endif + +distclean:: distclean-relx-rel + +# Plugin-specific targets. + +$(RELX): + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL)) + $(verbose) chmod +x $(RELX) + +relx-rel: $(RELX) rel-deps app + $(verbose) $(RELX) -c $(RELX_CONFIG) $(RELX_OPTS) release $(if $(filter 1,$(RELX_TAR)),tar) + +relx-relup: $(RELX) rel-deps app + $(verbose) $(RELX) -c $(RELX_CONFIG) $(RELX_OPTS) release relup $(if $(filter 1,$(RELX_TAR)),tar) + +distclean-relx-rel: + $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR) + +# Run target. + +ifeq ($(wildcard $(RELX_CONFIG)),) +run:: +else + +define get_relx_release.erl + {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"), + {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config), + Vsn = case Vsn0 of + {cmd, Cmd} -> os:cmd(Cmd); + semver -> ""; + {semver, _} -> ""; + VsnStr -> Vsn0 + end, + io:format("~s ~s", [Name, Vsn]), + halt(0). +endef + +RELX_REL := $(shell $(call erlang,$(get_relx_release.erl))) +RELX_REL_NAME := $(word 1,$(RELX_REL)) +RELX_REL_VSN := $(word 2,$(RELX_REL)) + +ifeq ($(PLATFORM),msys2) +RELX_REL_EXT := .cmd +endif + +run:: all + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) console + +ifdef RELOAD +rel:: + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \ + eval "io:format(\"~p~n\", [c:lm()])" +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Relx targets:" \ + " run Compile the project, build the release and run it" + +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, M Robert Martin +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: shell + +# Configuration. + +SHELL_ERL ?= erl +SHELL_PATHS ?= $(CURDIR)/ebin $(APPS_DIR)/*/ebin $(DEPS_DIR)/*/ebin $(TEST_DIR) +SHELL_OPTS ?= + +ALL_SHELL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(SHELL_DEPS)) + +# Core targets + +help:: + $(verbose) printf "%s\n" "" \ + "Shell targets:" \ + " shell Run an erlang shell with SHELL_OPTS or reasonable default" + +# Plugin-specific targets. + +$(foreach dep,$(SHELL_DEPS),$(eval $(call dep_target,$(dep)))) + +build-shell-deps: $(ALL_SHELL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_SHELL_DEPS_DIRS) ; do $(MAKE) -C $$dep ; done + +shell: build-shell-deps + $(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS) + +# Copyright 2017, Stanislaw Klekot +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-sphinx sphinx + +# Configuration. + +SPHINX_BUILD ?= sphinx-build +SPHINX_SOURCE ?= doc +SPHINX_CONFDIR ?= +SPHINX_FORMATS ?= html +SPHINX_DOCTREES ?= $(ERLANG_MK_TMP)/sphinx.doctrees +SPHINX_OPTS ?= + +#sphinx_html_opts = +#sphinx_html_output = html +#sphinx_man_opts = +#sphinx_man_output = man +#sphinx_latex_opts = +#sphinx_latex_output = latex + +# Helpers. + +sphinx_build_0 = @echo " SPHINX" $1; $(SPHINX_BUILD) -N -q +sphinx_build_1 = $(SPHINX_BUILD) -N +sphinx_build_2 = set -x; $(SPHINX_BUILD) +sphinx_build = $(sphinx_build_$(V)) + +define sphinx.build +$(call sphinx_build,$1) -b $1 -d $(SPHINX_DOCTREES) $(if $(SPHINX_CONFDIR),-c $(SPHINX_CONFDIR)) $(SPHINX_OPTS) $(sphinx_$1_opts) -- $(SPHINX_SOURCE) $(call sphinx.output,$1) + +endef + +define sphinx.output +$(if $(sphinx_$1_output),$(sphinx_$1_output),$1) +endef + +# Targets. + +ifneq ($(wildcard $(if $(SPHINX_CONFDIR),$(SPHINX_CONFDIR),$(SPHINX_SOURCE))/conf.py),) +docs:: sphinx +distclean:: distclean-sphinx +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Sphinx targets:" \ + " sphinx Generate Sphinx documentation." \ + "" \ + "ReST sources and 'conf.py' file are expected in directory pointed by" \ + "SPHINX_SOURCE ('doc' by default). SPHINX_FORMATS lists formats to build (only" \ + "'html' format is generated by default); target directory can be specified by" \ + 'setting sphinx_$${format}_output, for example: sphinx_html_output = output/html' \ + "Additional Sphinx options can be set in SPHINX_OPTS." + +# Plugin-specific targets. + +sphinx: + $(foreach F,$(SPHINX_FORMATS),$(call sphinx.build,$F)) + +distclean-sphinx: + $(gen_verbose) rm -rf $(filter-out $(SPHINX_SOURCE),$(foreach F,$(SPHINX_FORMATS),$(call sphinx.output,$F))) + +# Copyright (c) 2017, Jean-Sébastien Pédron +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: show-ERL_LIBS show-ERLC_OPTS show-TEST_ERLC_OPTS + +show-ERL_LIBS: + @echo $(ERL_LIBS) + +show-ERLC_OPTS: + @$(foreach opt,$(ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +show-TEST_ERLC_OPTS: + @$(foreach opt,$(TEST_ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter triq,$(DEPS) $(TEST_DEPS)),triq) +.PHONY: triq + +# Targets. + +tests:: triq + +define triq_check.erl + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + try + case $(1) of + all -> [true] =:= lists:usort([triq:check(M) || M <- [$(call comma_list,$(3))]]); + module -> triq:check($(2)); + function -> triq:check($(2)) + end + of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +triq: test-build + $(verbose) $(call erlang,$(call triq_check.erl,module,$(t))) +else +triq: test-build + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call triq_check.erl,function,$(t)())) +endif +else +triq: test-build + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call triq_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Erlang Solutions Ltd. +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: xref distclean-xref + +# Configuration. + +ifeq ($(XREF_CONFIG),) + XREFR_ARGS := +else + XREFR_ARGS := -c $(XREF_CONFIG) +endif + +XREFR ?= $(CURDIR)/xrefr +export XREFR + +XREFR_URL ?= https://github.com/inaka/xref_runner/releases/download/1.1.0/xrefr + +# Core targets. + +help:: + $(verbose) printf '%s\n' '' \ + 'Xref targets:' \ + ' xref Run Xrefr using $$XREF_CONFIG as config file if defined' + +distclean:: distclean-xref + +# Plugin-specific targets. + +$(XREFR): + $(gen_verbose) $(call core_http_get,$(XREFR),$(XREFR_URL)) + $(verbose) chmod +x $(XREFR) + +xref: deps app $(XREFR) + $(gen_verbose) $(XREFR) $(XREFR_ARGS) + +distclean-xref: + $(gen_verbose) rm -rf $(XREFR) + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +COVER_REPORT_DIR ?= cover +COVER_DATA_DIR ?= $(CURDIR) + +# Hook in coverage to ct + +ifdef COVER +ifdef CT_RUN +ifneq ($(wildcard $(TEST_DIR)),) +test-build:: $(TEST_DIR)/ct.cover.spec + +$(TEST_DIR)/ct.cover.spec: cover-data-dir + $(gen_verbose) printf "%s\n" \ + "{incl_app, '$(PROJECT)', details}." \ + '{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@ + +CT_RUN += -cover $(TEST_DIR)/ct.cover.spec +endif +endif +endif + +# Core targets + +ifdef COVER +ifneq ($(COVER_REPORT_DIR),) +tests:: + $(verbose) $(MAKE) --no-print-directory cover-report +endif + +cover-data-dir: | $(COVER_DATA_DIR) + +$(COVER_DATA_DIR): + $(verbose) mkdir -p $(COVER_DATA_DIR) +else +cover-data-dir: +endif + +clean:: coverdata-clean + +ifneq ($(COVER_REPORT_DIR),) +distclean:: cover-report-clean +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Cover targets:" \ + " cover-report Generate a HTML coverage report from previously collected" \ + " cover data." \ + " all.coverdata Merge all coverdata files into all.coverdata." \ + "" \ + "If COVER=1 is set, coverage data is generated by the targets eunit and ct. The" \ + "target tests additionally generates a HTML coverage report from the combined" \ + "coverdata files from each of these testing tools. HTML reports can be disabled" \ + "by setting COVER_REPORT_DIR to empty." + +# Plugin specific targets + +COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata)) + +.PHONY: coverdata-clean +coverdata-clean: + $(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec + +# Merge all coverdata files into one. +define cover_export.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + cover:export("$(COVER_DATA_DIR)/$@"), halt(0). +endef + +all.coverdata: $(COVERDATA) cover-data-dir + $(gen_verbose) $(call erlang,$(cover_export.erl)) + +# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to +# empty if you want the coverdata files but not the HTML report. +ifneq ($(COVER_REPORT_DIR),) + +.PHONY: cover-report-clean cover-report + +cover-report-clean: + $(gen_verbose) rm -rf $(COVER_REPORT_DIR) + $(if $(shell ls -A $(COVER_DATA_DIR)/),,$(verbose) rmdir $(COVER_DATA_DIR)) + +ifeq ($(COVERDATA),) +cover-report: +else + +# Modules which include eunit.hrl always contain one line without coverage +# because eunit defines test/0 which is never called. We compensate for this. +EUNIT_HRL_MODS = $(subst $(space),$(comma),$(shell \ + grep -H -e '^\s*-include.*include/eunit\.hrl"' src/*.erl \ + | sed "s/^src\/\(.*\)\.erl:.*/'\1'/" | uniq)) + +define cover_report.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + Ms = cover:imported_modules(), + [cover:analyse_to_file(M, "$(COVER_REPORT_DIR)/" ++ atom_to_list(M) + ++ ".COVER.html", [html]) || M <- Ms], + Report = [begin {ok, R} = cover:analyse(M, module), R end || M <- Ms], + EunitHrlMods = [$(EUNIT_HRL_MODS)], + Report1 = [{M, {Y, case lists:member(M, EunitHrlMods) of + true -> N - 1; false -> N end}} || {M, {Y, N}} <- Report], + TotalY = lists:sum([Y || {_, {Y, _}} <- Report1]), + TotalN = lists:sum([N || {_, {_, N}} <- Report1]), + Perc = fun(Y, N) -> case Y + N of 0 -> 100; S -> round(100 * Y / S) end end, + TotalPerc = Perc(TotalY, TotalN), + {ok, F} = file:open("$(COVER_REPORT_DIR)/index.html", [write]), + io:format(F, "~n" + "~n" + "Coverage report~n" + "~n", []), + io:format(F, "

Coverage

~n

Total: ~p%

~n", [TotalPerc]), + io:format(F, "~n", []), + [io:format(F, "" + "~n", + [M, M, Perc(Y, N)]) || {M, {Y, N}} <- Report1], + How = "$(subst $(space),$(comma)$(space),$(basename $(COVERDATA)))", + Date = "$(shell date -u "+%Y-%m-%dT%H:%M:%SZ")", + io:format(F, "
ModuleCoverage
~p~p%
~n" + "

Generated using ~s and erlang.mk on ~s.

~n" + "", [How, Date]), + halt(). +endef + +cover-report: + $(verbose) mkdir -p $(COVER_REPORT_DIR) + $(gen_verbose) $(call erlang,$(cover_report.erl)) + +endif +endif # ifneq ($(COVER_REPORT_DIR),) + +# Copyright (c) 2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: sfx + +ifdef RELX_REL +ifdef SFX + +# Configuration. + +SFX_ARCHIVE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/$(RELX_REL_NAME)-$(RELX_REL_VSN).tar.gz +SFX_OUTPUT_FILE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME).run + +# Core targets. + +rel:: sfx + +# Plugin-specific targets. + +define sfx_stub +#!/bin/sh + +TMPDIR=`mktemp -d` +ARCHIVE=`awk '/^__ARCHIVE_BELOW__$$/ {print NR + 1; exit 0;}' $$0` +FILENAME=$$(basename $$0) +REL=$${FILENAME%.*} + +tail -n+$$ARCHIVE $$0 | tar -xzf - -C $$TMPDIR + +$$TMPDIR/bin/$$REL console +RET=$$? + +rm -rf $$TMPDIR + +exit $$RET + +__ARCHIVE_BELOW__ +endef + +sfx: + $(call render_template,sfx_stub,$(SFX_OUTPUT_FILE)) + $(gen_verbose) cat $(SFX_ARCHIVE) >> $(SFX_OUTPUT_FILE) + $(verbose) chmod +x $(SFX_OUTPUT_FILE) + +endif +endif + +# Copyright (c) 2013-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# External plugins. + +DEP_PLUGINS ?= + +$(foreach p,$(DEP_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/plugins.mk,$p)))) + +# Copyright (c) 2013-2015, Loïc Hoguin +# Copyright (c) 2015-2016, Jean-Sébastien Pédron +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Fetch dependencies recursively (without building them). + +.PHONY: fetch-deps fetch-doc-deps fetch-rel-deps fetch-test-deps \ + fetch-shell-deps + +.PHONY: $(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +fetch-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +fetch-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +fetch-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +fetch-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +fetch-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +ifneq ($(SKIP_DEPS),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): + $(verbose) :> $@ +else +# By default, we fetch "normal" dependencies. They are also included no +# matter the type of requested dependencies. +# +# $(ALL_DEPS_DIRS) includes $(BUILD_DEPS). + +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_DOC_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_REL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_TEST_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_SHELL_DEPS_DIRS) + +# Allow to use fetch-deps and $(DEP_TYPES) to fetch multiple types of +# dependencies with a single target. +ifneq ($(filter doc,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DOC_DEPS_DIRS) +endif +ifneq ($(filter rel,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_REL_DEPS_DIRS) +endif +ifneq ($(filter test,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_TEST_DEPS_DIRS) +endif +ifneq ($(filter shell,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_SHELL_DEPS_DIRS) +endif + +ERLANG_MK_RECURSIVE_TMP_LIST := $(abspath $(ERLANG_MK_TMP)/recursive-tmp-deps.log) + +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +ifndef IS_APP + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep $@ \ + IS_APP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + done +endif + $(verbose) set -e; for dep in $^ ; do \ + if ! grep -qs ^$$dep$$ $(ERLANG_MK_RECURSIVE_TMP_LIST); then \ + echo $$dep >> $(ERLANG_MK_RECURSIVE_TMP_LIST); \ + if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \ + $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \ + $(MAKE) -C $$dep fetch-deps \ + IS_DEP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + fi \ + fi \ + done +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) sort < $(ERLANG_MK_RECURSIVE_TMP_LIST) | uniq > $@ + $(verbose) rm $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +endif # ifneq ($(SKIP_DEPS),) + +# List dependencies recursively. + +.PHONY: list-deps list-doc-deps list-rel-deps list-test-deps \ + list-shell-deps + +list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +list-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +list-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +list-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: + $(verbose) cat $^ diff --git a/deps/gun/rebar.config b/deps/gun/rebar.config new file mode 100644 index 0000000000000000000000000000000000000000..347417f934a9af2191dc66bcaa2f93d3ca761d99 --- /dev/null +++ b/deps/gun/rebar.config @@ -0,0 +1,4 @@ +{deps, [ +{cowlib,".*",{git,"https://github.com/ninenines/cowlib","2.6.0"}} +]}. +{erl_opts, [debug_info,warn_export_vars,warn_shadow_vars,warn_obsolete_guard]}. diff --git a/deps/gun/src/gun.app.src b/deps/gun/src/gun.app.src new file mode 100644 index 0000000000000000000000000000000000000000..81886a820cc0918054ed28af9081337a21f8835f --- /dev/null +++ b/deps/gun/src/gun.app.src @@ -0,0 +1,8 @@ +{application,gun, + [{description,"HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP."}, + {vsn,"1.3.2"}, + {modules,[]}, + {registered,[gun_sup]}, + {applications,[kernel,stdlib,ssl,cowlib]}, + {mod,{gun_app,[]}}, + {env,[]}]}. diff --git a/deps/gun/src/gun.erl b/deps/gun/src/gun.erl new file mode 100644 index 0000000000000000000000000000000000000000..1659ee3383edd15a469e2d53685c4ebb1515d47b --- /dev/null +++ b/deps/gun/src/gun.erl @@ -0,0 +1,980 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun). + +-ifdef(OTP_RELEASE). +-compile({nowarn_deprecated_function, [{erlang, get_stacktrace, 0}]}). +-endif. + +%% Connection. +-export([open/2]). +-export([open/3]). +-export([open_unix/2]). +-export([info/1]). +-export([close/1]). +-export([shutdown/1]). + +%% Requests. +-export([delete/2]). +-export([delete/3]). +-export([delete/4]). +-export([get/2]). +-export([get/3]). +-export([get/4]). +-export([head/2]). +-export([head/3]). +-export([head/4]). +-export([options/2]). +-export([options/3]). +-export([options/4]). +-export([patch/3]). +-export([patch/4]). +-export([patch/5]). +-export([post/3]). +-export([post/4]). +-export([post/5]). +-export([put/3]). +-export([put/4]). +-export([put/5]). +-export([request/4]). +-export([request/5]). +-export([request/6]). + +%% Streaming data. +-export([data/4]). + +%% Tunneling. +-export([connect/2]). +-export([connect/3]). +-export([connect/4]). + +%% Awaiting gun messages. +-export([await/2]). +-export([await/3]). +-export([await/4]). +-export([await_body/2]). +-export([await_body/3]). +-export([await_body/4]). +-export([await_up/1]). +-export([await_up/2]). +-export([await_up/3]). + +%% Flushing gun messages. +-export([flush/1]). + +%% Cancelling a stream. +-export([cancel/2]). + +%% Websocket. +-export([ws_upgrade/2]). +-export([ws_upgrade/3]). +-export([ws_upgrade/4]). +-export([ws_send/2]). + +%% Internals. +-export([start_link/4]). +-export([proc_lib_hack/5]). +-export([system_continue/3]). +-export([system_terminate/4]). +-export([system_code_change/4]). + +-type headers() :: [{binary(), iodata()}]. + +-type ws_close_code() :: 1000..4999. +-type ws_frame() :: close | ping | pong + | {text | binary | close | ping | pong, iodata()} + | {close, ws_close_code(), iodata()}. + +-type opts() :: #{ + connect_timeout => timeout(), + http_opts => http_opts(), + http2_opts => http2_opts(), + protocols => [http | http2], + retry => non_neg_integer(), + retry_timeout => pos_integer(), + trace => boolean(), + transport => tcp | tls | ssl, + transport_opts => [gen_tcp:connect_option()] | [ssl:connect_option()], + ws_opts => ws_opts() +}. +-export_type([opts/0]). +%% @todo Add an option to disable/enable the notowner behavior. + +-type connect_destination() :: #{ + host := inet:hostname() | inet:ip_address(), + port := inet:port_number(), + username => iodata(), + password => iodata(), + protocol => http | http2, %% @todo Remove in Gun 2.0. + protocols => [http | http2], + transport => tcp | tls, + tls_opts => [ssl:connect_option()], + tls_handshake_timeout => timeout() +}. +-export_type([connect_destination/0]). + +-type intermediary() :: #{ + type := connect, + host := inet:hostname() | inet:ip_address(), + port := inet:port_number(), + transport := tcp | tls, + protocol := http | http2 +}. + +%% @todo When/if HTTP/2 CONNECT gets implemented, we will want an option here +%% to indicate that the request must be sent on an existing CONNECT stream. +%% This is of course not required for HTTP/1.1 since the CONNECT takes over +%% the entire connection. +-type req_opts() :: #{ + reply_to => pid() +}. +-export_type([req_opts/0]). + +-type http_opts() :: #{ + keepalive => timeout(), + transform_header_name => fun((binary()) -> binary()), + version => 'HTTP/1.1' | 'HTTP/1.0' +}. +-export_type([http_opts/0]). + +-type http2_opts() :: #{ + keepalive => timeout() +}. +-export_type([http2_opts/0]). + +%% @todo keepalive +-type ws_opts() :: #{ + compress => boolean(), + protocols => [{binary(), module()}] +}. +-export_type([ws_opts/0]). + +-record(state, { + parent :: pid(), + owner :: pid(), + owner_ref :: reference(), + host :: inet:hostname() | inet:ip_address(), + port :: inet:port_number(), + origin_host :: inet:hostname() | inet:ip_address(), + origin_port :: inet:port_number(), + intermediaries = [] :: [intermediary()], + opts :: opts(), + keepalive_ref :: undefined | reference(), + socket :: undefined | inet:socket() | ssl:sslsocket(), + transport :: module(), + protocol :: module(), + protocol_state :: any(), + last_error :: any() +}). + +%% Connection. + +-spec open(inet:hostname() | inet:ip_address(), inet:port_number()) + -> {ok, pid()} | {error, any()}. +open(Host, Port) -> + open(Host, Port, #{}). + +-spec open(inet:hostname() | inet:ip_address(), inet:port_number(), opts()) + -> {ok, pid()} | {error, any()}. +open(Host, Port, Opts) when is_list(Host); is_atom(Host); is_tuple(Host) -> + do_open(Host, Port, Opts). + +-spec open_unix(Path::string(), opts()) + -> {ok, pid()} | {error, any()}. +open_unix(SocketPath, Opts) -> + do_open({local, SocketPath}, 0, Opts). + +do_open(Host, Port, Opts0) -> + %% We accept both ssl and tls but only use tls in the code. + Opts = case Opts0 of + #{transport := ssl} -> Opts0#{transport => tls}; + _ -> Opts0 + end, + case check_options(maps:to_list(Opts)) of + ok -> + case supervisor:start_child(gun_sup, [self(), Host, Port, Opts]) of + OK = {ok, ServerPid} -> + consider_tracing(ServerPid, Opts), + OK; + StartError -> + StartError + end; + CheckError -> + CheckError + end. + +check_options([]) -> + ok; +check_options([{connect_timeout, infinity}|Opts]) -> + check_options(Opts); +check_options([{connect_timeout, T}|Opts]) when is_integer(T), T >= 0 -> + check_options(Opts); +check_options([{http_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_http:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([{http2_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_http2:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([Opt = {protocols, L}|Opts]) when is_list(L) -> + Len = length(L), + case length(lists:usort(L)) of + Len when Len > 0 -> + Check = lists:usort([(P =:= http) orelse (P =:= http2) || P <- L]), + case Check of + [true] -> + check_options(Opts); + _ -> + {error, {options, Opt}} + end; + _ -> + {error, {options, Opt}} + end; +check_options([{retry, R}|Opts]) when is_integer(R), R >= 0 -> + check_options(Opts); +check_options([{retry_timeout, T}|Opts]) when is_integer(T), T >= 0 -> + check_options(Opts); +check_options([{trace, B}|Opts]) when B =:= true; B =:= false -> + check_options(Opts); +check_options([{transport, T}|Opts]) when T =:= tcp; T =:= tls -> + check_options(Opts); +check_options([{transport_opts, L}|Opts]) when is_list(L) -> + check_options(Opts); +check_options([{ws_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_ws:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([Opt|_]) -> + {error, {options, Opt}}. + +consider_tracing(ServerPid, #{trace := true}) -> + dbg:start(), + dbg:tracer(), + dbg:tpl(gun, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_http, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_http2, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_ws, [{'_', [], [{return_trace}]}]), + dbg:p(ServerPid, all); +consider_tracing(_, _) -> + ok. + +-spec info(pid()) -> map(). +info(ServerPid) -> + {_, #state{ + socket=Socket, + transport=Transport, + protocol=Protocol, + origin_host=OriginHost, + origin_port=OriginPort, + intermediaries=Intermediaries + }} = sys:get_state(ServerPid), + {ok, {SockIP, SockPort}} = Transport:sockname(Socket), + #{ + socket => Socket, + transport => Transport:name(), + protocol => Protocol:name(), + sock_ip => SockIP, + sock_port => SockPort, + origin_host => OriginHost, + origin_port => OriginPort, + %% Intermediaries are listed in the order data goes through them. + intermediaries => lists:reverse(Intermediaries) + }. + +-spec close(pid()) -> ok. +close(ServerPid) -> + supervisor:terminate_child(gun_sup, ServerPid). + +-spec shutdown(pid()) -> ok. +shutdown(ServerPid) -> + _ = ServerPid ! {shutdown, self()}, + ok. + +%% Requests. + +-spec delete(pid(), iodata()) -> reference(). +delete(ServerPid, Path) -> + request(ServerPid, <<"DELETE">>, Path, []). + +-spec delete(pid(), iodata(), headers()) -> reference(). +delete(ServerPid, Path, Headers) -> + request(ServerPid, <<"DELETE">>, Path, Headers). + +-spec delete(pid(), iodata(), headers(), req_opts()) -> reference(). +delete(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"DELETE">>, Path, Headers, <<>>, ReqOpts). + +-spec get(pid(), iodata()) -> reference(). +get(ServerPid, Path) -> + request(ServerPid, <<"GET">>, Path, []). + +-spec get(pid(), iodata(), headers()) -> reference(). +get(ServerPid, Path, Headers) -> + request(ServerPid, <<"GET">>, Path, Headers). + +-spec get(pid(), iodata(), headers(), req_opts()) -> reference(). +get(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"GET">>, Path, Headers, <<>>, ReqOpts). + +-spec head(pid(), iodata()) -> reference(). +head(ServerPid, Path) -> + request(ServerPid, <<"HEAD">>, Path, []). + +-spec head(pid(), iodata(), headers()) -> reference(). +head(ServerPid, Path, Headers) -> + request(ServerPid, <<"HEAD">>, Path, Headers). + +-spec head(pid(), iodata(), headers(), req_opts()) -> reference(). +head(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"HEAD">>, Path, Headers, <<>>, ReqOpts). + +-spec options(pid(), iodata()) -> reference(). +options(ServerPid, Path) -> + request(ServerPid, <<"OPTIONS">>, Path, []). + +-spec options(pid(), iodata(), headers()) -> reference(). +options(ServerPid, Path, Headers) -> + request(ServerPid, <<"OPTIONS">>, Path, Headers). + +-spec options(pid(), iodata(), headers(), req_opts()) -> reference(). +options(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"OPTIONS">>, Path, Headers, <<>>, ReqOpts). + +-spec patch(pid(), iodata(), headers()) -> reference(). +patch(ServerPid, Path, Headers) -> + request(ServerPid, <<"PATCH">>, Path, Headers). + +-spec patch(pid(), iodata(), headers(), iodata()) -> reference(). +patch(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"PATCH">>, Path, Headers, Body). + +-spec patch(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +patch(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"PATCH">>, Path, Headers, Body, ReqOpts). + +-spec post(pid(), iodata(), headers()) -> reference(). +post(ServerPid, Path, Headers) -> + request(ServerPid, <<"POST">>, Path, Headers). + +-spec post(pid(), iodata(), headers(), iodata()) -> reference(). +post(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"POST">>, Path, Headers, Body). + +-spec post(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +post(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"POST">>, Path, Headers, Body, ReqOpts). + +-spec put(pid(), iodata(), headers()) -> reference(). +put(ServerPid, Path, Headers) -> + request(ServerPid, <<"PUT">>, Path, Headers). + +-spec put(pid(), iodata(), headers(), iodata()) -> reference(). +put(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"PUT">>, Path, Headers, Body). + +-spec put(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +put(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"PUT">>, Path, Headers, Body, ReqOpts). + +-spec request(pid(), iodata(), iodata(), headers()) -> reference(). +request(ServerPid, Method, Path, Headers) -> + request(ServerPid, Method, Path, Headers, <<>>, #{}). + +-spec request(pid(), iodata(), iodata(), headers(), iodata()) -> reference(). +request(ServerPid, Method, Path, Headers, Body) -> + request(ServerPid, Method, Path, Headers, Body, #{}). + +%% @todo Accept header names as maps. +-spec request(pid(), iodata(), iodata(), headers(), iodata(), req_opts()) -> reference(). +request(ServerPid, Method, Path, Headers, Body, ReqOpts) -> + StreamRef = make_ref(), + ReplyTo = maps:get(reply_to, ReqOpts, self()), + _ = ServerPid ! {request, ReplyTo, StreamRef, Method, Path, Headers, Body}, + StreamRef. + +%% Streaming data. + +-spec data(pid(), reference(), fin | nofin, iodata()) -> ok. +data(ServerPid, StreamRef, IsFin, Data) -> + _ = ServerPid ! {data, self(), StreamRef, IsFin, Data}, + ok. + +%% Tunneling. + +-spec connect(pid(), connect_destination()) -> reference(). +connect(ServerPid, Destination) -> + connect(ServerPid, Destination, [], #{}). + +-spec connect(pid(), connect_destination(), headers()) -> reference(). +connect(ServerPid, Destination, Headers) -> + connect(ServerPid, Destination, Headers, #{}). + +-spec connect(pid(), connect_destination(), headers(), req_opts()) -> reference(). +connect(ServerPid, Destination, Headers, ReqOpts) -> + StreamRef = make_ref(), + ReplyTo = maps:get(reply_to, ReqOpts, self()), + _ = ServerPid ! {connect, ReplyTo, StreamRef, Destination, Headers}, + StreamRef. + +%% Awaiting gun messages. + +%% @todo spec await await_body + +await(ServerPid, StreamRef) -> + MRef = monitor(process, ServerPid), + Res = await(ServerPid, StreamRef, 5000, MRef), + demonitor(MRef, [flush]), + Res. + +await(ServerPid, StreamRef, MRef) when is_reference(MRef) -> + await(ServerPid, StreamRef, 5000, MRef); +await(ServerPid, StreamRef, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await(ServerPid, StreamRef, Timeout, MRef), + demonitor(MRef, [flush]), + Res. + +%% @todo Add gun_upgrade and gun_ws? +await(ServerPid, StreamRef, Timeout, MRef) -> + receive + {gun_inform, ServerPid, StreamRef, Status, Headers} -> + {inform, Status, Headers}; + {gun_response, ServerPid, StreamRef, IsFin, Status, Headers} -> + {response, IsFin, Status, Headers}; + {gun_data, ServerPid, StreamRef, IsFin, Data} -> + {data, IsFin, Data}; + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {trailers, Trailers}; + {gun_push, ServerPid, StreamRef, NewStreamRef, Method, URI, Headers} -> + {push, NewStreamRef, Method, URI, Headers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, Reason}; + {gun_error, ServerPid, Reason} -> + {error, Reason}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +await_body(ServerPid, StreamRef) -> + MRef = monitor(process, ServerPid), + Res = await_body(ServerPid, StreamRef, 5000, MRef, <<>>), + demonitor(MRef, [flush]), + Res. + +await_body(ServerPid, StreamRef, MRef) when is_reference(MRef) -> + await_body(ServerPid, StreamRef, 5000, MRef, <<>>); +await_body(ServerPid, StreamRef, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await_body(ServerPid, StreamRef, Timeout, MRef, <<>>), + demonitor(MRef, [flush]), + Res. + +await_body(ServerPid, StreamRef, Timeout, MRef) -> + await_body(ServerPid, StreamRef, Timeout, MRef, <<>>). + +await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> + receive + {gun_data, ServerPid, StreamRef, nofin, Data} -> + await_body(ServerPid, StreamRef, Timeout, MRef, + << Acc/binary, Data/binary >>); + {gun_data, ServerPid, StreamRef, fin, Data} -> + {ok, << Acc/binary, Data/binary >>}; + %% It's OK to return trailers here because the client + %% specifically requested them. + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {ok, Acc, Trailers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, Reason}; + {gun_error, ServerPid, Reason} -> + {error, Reason}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +-spec await_up(pid()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, 5000, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), reference() | timeout()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid, MRef) when is_reference(MRef) -> + await_up(ServerPid, 5000, MRef); +await_up(ServerPid, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, Timeout, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), timeout(), reference()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid, Timeout, MRef) -> + receive + {gun_up, ServerPid, Protocol} -> + {ok, Protocol}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +-spec flush(pid() | reference()) -> ok. +flush(ServerPid) when is_pid(ServerPid) -> + flush_pid(ServerPid); +flush(StreamRef) -> + flush_ref(StreamRef). + +flush_pid(ServerPid) -> + receive + {gun_up, ServerPid, _} -> + flush_pid(ServerPid); + {gun_down, ServerPid, _, _, _, _} -> + flush_pid(ServerPid); + {gun_inform, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_response, ServerPid, _, _, _, _} -> + flush_pid(ServerPid); + {gun_data, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_trailers, ServerPid, _, _} -> + flush_pid(ServerPid); + {gun_push, ServerPid, _, _, _, _, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _} -> + flush_pid(ServerPid); + {gun_upgrade, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_ws, ServerPid, _, _} -> + flush_pid(ServerPid); + {'DOWN', _, process, ServerPid, _} -> + flush_pid(ServerPid) + after 0 -> + ok + end. + +flush_ref(StreamRef) -> + receive + {gun_inform, _, StreamRef, _, _} -> + flush_pid(StreamRef); + {gun_response, _, StreamRef, _, _, _} -> + flush_ref(StreamRef); + {gun_data, _, StreamRef, _, _} -> + flush_ref(StreamRef); + {gun_trailers, _, StreamRef, _} -> + flush_ref(StreamRef); + {gun_push, _, StreamRef, _, _, _, _, _} -> + flush_ref(StreamRef); + {gun_error, _, StreamRef, _} -> + flush_ref(StreamRef); + {gun_upgrade, _, StreamRef, _, _} -> + flush_ref(StreamRef); + {gun_ws, _, StreamRef, _} -> + flush_ref(StreamRef) + after 0 -> + ok + end. + +%% Cancelling a stream. + +-spec cancel(pid(), reference()) -> ok. +cancel(ServerPid, StreamRef) -> + _ = ServerPid ! {cancel, self(), StreamRef}, + ok. + +%% @todo Allow upgrading an HTTP/1.1 connection to HTTP/2. +%% http2_upgrade + +%% Websocket. + +-spec ws_upgrade(pid(), iodata()) -> reference(). +ws_upgrade(ServerPid, Path) -> + ws_upgrade(ServerPid, Path, []). + +-spec ws_upgrade(pid(), iodata(), headers()) -> reference(). +ws_upgrade(ServerPid, Path, Headers) -> + StreamRef = make_ref(), + _ = ServerPid ! {ws_upgrade, self(), StreamRef, Path, Headers}, + StreamRef. + +-spec ws_upgrade(pid(), iodata(), headers(), ws_opts()) -> reference(). +ws_upgrade(ServerPid, Path, Headers, Opts) -> + ok = gun_ws:check_options(Opts), + StreamRef = make_ref(), + _ = ServerPid ! {ws_upgrade, self(), StreamRef, Path, Headers, Opts}, + StreamRef. + +%% @todo ws_send/2 will need to be deprecated in favor of a variant with StreamRef. +%% But it can be kept for the time being since it can still work for HTTP/1.1. +-spec ws_send(pid(), ws_frame() | [ws_frame()]) -> ok. +ws_send(ServerPid, Frames) -> + _ = ServerPid ! {ws_send, self(), Frames}, + ok. + +%% Internals. + +start_link(Owner, Host, Port, Opts) -> + proc_lib:start_link(?MODULE, proc_lib_hack, + [self(), Owner, Host, Port, Opts]). + +proc_lib_hack(Parent, Owner, Host, Port, Opts) -> + try + init(Parent, Owner, Host, Port, Opts) + catch + _:normal -> exit(normal); + _:shutdown -> exit(shutdown); + _:Reason = {shutdown, _} -> exit(Reason); + _:Reason -> exit({Reason, erlang:get_stacktrace()}) + end. + +init(Parent, Owner, Host, Port, Opts) -> + ok = proc_lib:init_ack(Parent, {ok, self()}), + Retry = maps:get(retry, Opts, 5), + Transport = case maps:get(transport, Opts, default_transport(Port)) of + tcp -> gun_tcp; + tls -> gun_tls + end, + OwnerRef = monitor(process, Owner), + transport_connect(#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, + host=Host, port=Port, origin_host=Host, origin_port=Port, + opts=Opts, transport=Transport}, Retry). + +default_transport(443) -> tls; +default_transport(_) -> tcp. + +transport_connect(State=#state{host=Host, port=Port, opts=Opts, transport=Transport=gun_tls}, Retries) -> + TransportOpts = [binary, {active, false}|ensure_alpn( + maps:get(protocols, Opts, [http2, http]), + maps:get(transport_opts, Opts, []))], + case Transport:connect(Host, Port, TransportOpts, maps:get(connect_timeout, Opts, infinity)) of + {ok, Socket} -> + {Protocol, ProtoOptsKey} = case ssl:negotiated_protocol(Socket) of + {ok, <<"h2">>} -> {gun_http2, http2_opts}; + _ -> {gun_http, http_opts} + end, + up(State, Socket, Protocol, ProtoOptsKey); + {error, Reason} -> + retry(State#state{last_error=Reason}, Retries) + end; +transport_connect(State=#state{host=Host, port=Port, opts=Opts, transport=Transport}, Retries) -> + TransportOpts = [binary, {active, false} + |maps:get(transport_opts, Opts, [])], + case Transport:connect(Host, Port, TransportOpts, maps:get(connect_timeout, Opts, infinity)) of + {ok, Socket} -> + {Protocol, ProtoOptsKey} = case maps:get(protocols, Opts, [http]) of + [http] -> {gun_http, http_opts}; + [http2] -> {gun_http2, http2_opts} + end, + up(State, Socket, Protocol, ProtoOptsKey); + {error, Reason} -> + retry(State#state{last_error=Reason}, Retries) + end. + +ensure_alpn(Protocols0, TransportOpts) -> + Protocols = [case P of + http -> <<"http/1.1">>; + http2 -> <<"h2">> + end || P <- Protocols0], + [ + {alpn_advertised_protocols, Protocols}, + {client_preferred_next_protocols, {client, Protocols, <<"http/1.1">>}} + |TransportOpts]. + +up(State=#state{owner=Owner, opts=Opts, transport=Transport}, Socket, Protocol, ProtoOptsKey) -> + ProtoOpts = maps:get(ProtoOptsKey, Opts, #{}), + ProtoState = Protocol:init(Owner, Socket, Transport, ProtoOpts), + Owner ! {gun_up, self(), Protocol:name()}, + before_loop(State#state{socket=Socket, protocol=Protocol, protocol_state=ProtoState}). + +down(State=#state{owner=Owner, opts=Opts, protocol=Protocol, protocol_state=ProtoState}, Reason) -> + {KilledStreams, UnprocessedStreams} = Protocol:down(ProtoState), + Owner ! {gun_down, self(), Protocol:name(), Reason, KilledStreams, UnprocessedStreams}, + retry(State#state{socket=undefined, protocol=undefined, protocol_state=undefined, + last_error=Reason}, maps:get(retry, Opts, 5)). + +retry(#state{last_error=Reason}, 0) -> + exit({shutdown, Reason}); +retry(State=#state{keepalive_ref=KeepaliveRef}, Retries) when is_reference(KeepaliveRef) -> + _ = erlang:cancel_timer(KeepaliveRef), + %% Flush if we have a keepalive message + receive + keepalive -> ok + after 0 -> + ok + end, + retry_loop(State#state{keepalive_ref=undefined}, Retries - 1); +retry(State, Retries) -> + retry_loop(State, Retries - 1). + +retry_loop(State=#state{parent=Parent, opts=Opts}, Retries) -> + _ = erlang:send_after(maps:get(retry_timeout, Opts, 5000), self(), retry), + receive + retry -> + transport_connect(State, Retries); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {retry_loop, State, Retries}) + end. + +before_loop(State=#state{opts=Opts, protocol=Protocol}) -> + %% @todo Might not be worth checking every time? + ProtoOptsKey = case Protocol of + gun_http -> http_opts; + gun_http2 -> http2_opts + end, + ProtoOpts = maps:get(ProtoOptsKey, Opts, #{}), + Keepalive = maps:get(keepalive, ProtoOpts, 5000), + KeepaliveRef = case Keepalive of + infinity -> undefined; + _ -> erlang:send_after(Keepalive, self(), keepalive) + end, + loop(State#state{keepalive_ref=KeepaliveRef}). + +loop(State=#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, + origin_host=Host, origin_port=Port, opts=Opts, socket=Socket, + transport=Transport, protocol=Protocol, protocol_state=ProtoState}) -> + {OK, Closed, Error} = Transport:messages(), + Transport:setopts(Socket, [{active, once}]), + receive + {OK, Socket, Data} -> + case Protocol:handle(Data, ProtoState) of + Commands when is_list(Commands) -> + commands(Commands, State); + Command -> + commands([Command], State) + end; + {Closed, Socket} -> + Protocol:close(ProtoState), + Transport:close(Socket), + down(State, closed); + {Error, Socket, Reason} -> + Protocol:close(ProtoState), + Transport:close(Socket), + down(State, {error, Reason}); + {OK, _PreviousSocket, _Data} -> + loop(State); + {Closed, _PreviousSocket} -> + loop(State); + {Error, _PreviousSocket, _} -> + loop(State); + keepalive -> + ProtoState2 = Protocol:keepalive(ProtoState), + before_loop(State#state{protocol_state=ProtoState2}); + {request, ReplyTo, StreamRef, Method, Path, Headers, <<>>} -> + ProtoState2 = Protocol:request(ProtoState, + StreamRef, ReplyTo, Method, Host, Port, Path, Headers), + loop(State#state{protocol_state=ProtoState2}); + {request, ReplyTo, StreamRef, Method, Path, Headers, Body} -> + ProtoState2 = Protocol:request(ProtoState, + StreamRef, ReplyTo, Method, Host, Port, Path, Headers, Body), + loop(State#state{protocol_state=ProtoState2}); + %% @todo Do we want to reject ReplyTo if it's not the process + %% who initiated the connection? For both data and cancel. + {data, ReplyTo, StreamRef, IsFin, Data} -> + ProtoState2 = Protocol:data(ProtoState, + StreamRef, ReplyTo, IsFin, Data), + loop(State#state{protocol_state=ProtoState2}); + {connect, ReplyTo, StreamRef, Destination0, Headers} -> + %% The protocol option has been deprecated in favor of the protocols option. + %% Nobody probably ended up using it, but let's not break the interface. + Destination1 = case Destination0 of + #{protocols := _} -> + Destination0; + #{protocol := DestProto} -> + Destination0#{protocols => [DestProto]}; + _ -> + Destination0 + end, + Destination = case Destination1 of + #{transport := tls} -> + Destination1#{tls_opts => ensure_alpn( + maps:get(protocols, Destination1, [http]), + maps:get(tls_opts, Destination1, []))}; + _ -> + Destination1 + end, + ProtoState2 = Protocol:connect(ProtoState, StreamRef, ReplyTo, Destination, Headers), + loop(State#state{protocol_state=ProtoState2}); + {cancel, ReplyTo, StreamRef} -> + ProtoState2 = Protocol:cancel(ProtoState, StreamRef, ReplyTo), + loop(State#state{protocol_state=ProtoState2}); + %% @todo Maybe make an interface in the protocol module instead of checking on protocol name. + %% An interface would also make sure that HTTP/1.0 can't upgrade. + {ws_upgrade, Owner, StreamRef, Path, Headers} when Protocol =:= gun_http -> + WsOpts = maps:get(ws_opts, Opts, #{}), + ProtoState2 = Protocol:ws_upgrade(ProtoState, StreamRef, Host, Port, Path, Headers, WsOpts), + loop(State#state{protocol_state=ProtoState2}); + {ws_upgrade, Owner, StreamRef, Path, Headers, WsOpts} when Protocol =:= gun_http -> + ProtoState2 = Protocol:ws_upgrade(ProtoState, StreamRef, Host, Port, Path, Headers, WsOpts), + loop(State#state{protocol_state=ProtoState2}); + %% @todo can fail if http/1.0 + {shutdown, Owner} -> + %% @todo Protocol:shutdown? + ok; + {'DOWN', OwnerRef, process, Owner, Reason} -> + Protocol:close(ProtoState), + Transport:close(Socket), + owner_gone(Reason); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {loop, State}); + {ws_upgrade, _, StreamRef, _, _} -> + Owner ! {gun_error, self(), StreamRef, {badstate, + "Websocket is only supported over HTTP/1.1."}}, + loop(State); + {ws_upgrade, _, StreamRef, _, _, _} -> + Owner ! {gun_error, self(), StreamRef, {badstate, + "Websocket is only supported over HTTP/1.1."}}, + loop(State); + {ws_send, _, _} -> + Owner ! {gun_error, self(), {badstate, + "Connection needs to be upgraded to Websocket " + "before the gun:ws_send/1 function can be used."}}, + loop(State); + %% @todo The ReplyTo patch disabled the notowner behavior. + %% We need to add an option to enforce this behavior if needed. + Any when is_tuple(Any), is_pid(element(2, Any)) -> + element(2, Any) ! {gun_error, self(), {notowner, + "Operations are restricted to the owner of the connection."}}, + loop(State); + Any -> + error_logger:error_msg("Unexpected message: ~w~n", [Any]), + loop(State) + end. + +commands([], State) -> + loop(State); +commands([close|_], State=#state{socket=Socket, transport=Transport}) -> + Transport:close(Socket), + down(State, normal); +commands([Error={error, _}|_], State=#state{socket=Socket, transport=Transport}) -> + Transport:close(Socket), + down(State, Error); +commands([{state, ProtoState}|Tail], State) -> + commands(Tail, State#state{protocol_state=ProtoState}); +%% @todo The scheme should probably not be ignored. +%% +%% Order is important: the origin must be changed before +%% the transport and/or protocol in order to keep track +%% of the intermediaries properly. +commands([{origin, _Scheme, Host, Port, Type}|Tail], + State=#state{transport=Transport, protocol=Protocol, + origin_host=IntermediateHost, origin_port=IntermediatePort, + intermediaries=Intermediaries}) -> + Info = #{ + type => Type, + host => IntermediateHost, + port => IntermediatePort, + transport => Transport:name(), + protocol => Protocol:name() + }, + commands(Tail, State#state{origin_host=Host, origin_port=Port, + intermediaries=[Info|Intermediaries]}); +commands([{switch_transport, Transport, Socket}|Tail], State) -> + commands(Tail, State#state{socket=Socket, transport=Transport}); +%% @todo The two loops should be reunified and this clause generalized. +commands([{switch_protocol, Protocol=gun_ws, ProtoState}], State) -> + ws_loop(State#state{protocol=Protocol, protocol_state=ProtoState}); +%% @todo And this state should probably not be ignored. +commands([{switch_protocol, Protocol, _ProtoState0}|Tail], + State=#state{owner=Owner, opts=Opts, socket=Socket, transport=Transport}) -> + ProtoOpts = maps:get(http2_opts, Opts, #{}), + ProtoState = Protocol:init(Owner, Socket, Transport, ProtoOpts), + commands(Tail, State#state{protocol=Protocol, protocol_state=ProtoState}). + +ws_loop(State=#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, socket=Socket, + transport=Transport, protocol=Protocol, protocol_state=ProtoState}) -> + {OK, Closed, Error} = Transport:messages(), + Transport:setopts(Socket, [{active, once}]), + receive + {OK, Socket, Data} -> + case Protocol:handle(Data, ProtoState) of + close -> + Transport:close(Socket), + down(State, normal); + ProtoState2 -> + ws_loop(State#state{protocol_state=ProtoState2}) + end; + {Closed, Socket} -> + Transport:close(Socket), + down(State, closed); + {Error, Socket, Reason} -> + Transport:close(Socket), + down(State, {error, Reason}); + %% Ignore any previous HTTP keep-alive. + keepalive -> + ws_loop(State); +% {ws_send, Owner, Frames} when is_list(Frames) -> +% todo; %% @todo + {ws_send, Owner, Frame} -> + case Protocol:send(Frame, ProtoState) of + close -> + Transport:close(Socket), + down(State, normal); + ProtoState2 -> + ws_loop(State#state{protocol_state=ProtoState2}) + end; + {shutdown, Owner} -> + %% @todo Protocol:shutdown? %% @todo close frame + ok; + {'DOWN', OwnerRef, process, Owner, Reason} -> + Protocol:close(owner_gone, ProtoState), + Transport:close(Socket), + owner_gone(Reason); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {ws_loop, State}); + Any when is_tuple(Any), is_pid(element(2, Any)) -> + element(2, Any) ! {gun_error, self(), {notowner, + "Operations are restricted to the owner of the connection."}}, + ws_loop(State); + Any -> + error_logger:error_msg("Unexpected message: ~w~n", [Any]) + end. + +-spec owner_gone(_) -> no_return(). +owner_gone(normal) -> exit(normal); +owner_gone(shutdown) -> exit(shutdown); +owner_gone(Shutdown = {shutdown, _}) -> exit(Shutdown); +owner_gone(Reason) -> error({owner_gone, Reason}). + +system_continue(_, _, {retry_loop, State, Retry}) -> + retry_loop(State, Retry); +system_continue(_, _, {loop, State}) -> + loop(State); +system_continue(_, _, {ws_loop, State}) -> + ws_loop(State). + +-spec system_terminate(any(), _, _, _) -> no_return(). +system_terminate(Reason, _, _, _) -> + exit(Reason). + +system_code_change(Misc, _, _, _) -> + {ok, Misc}. diff --git a/deps/gun/src/gun_app.erl b/deps/gun/src/gun_app.erl new file mode 100644 index 0000000000000000000000000000000000000000..d167e10ae56dec48516ae26beadffccb677e796b --- /dev/null +++ b/deps/gun/src/gun_app.erl @@ -0,0 +1,29 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +%% @private +-module(gun_app). +-behaviour(application). + +%% API. +-export([start/2]). +-export([stop/1]). + +%% API. + +start(_Type, _Args) -> + gun_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/gun/src/gun_content_handler.erl b/deps/gun/src/gun_content_handler.erl new file mode 100644 index 0000000000000000000000000000000000000000..a7decd62051ee9513bfeb5816aa92519bb83dd44 --- /dev/null +++ b/deps/gun/src/gun_content_handler.erl @@ -0,0 +1,69 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_content_handler). + +-export([init/5]). +-export([handle/3]). +-export([check_option/1]). + +-type opt() :: [module() | {module(), map()}]. +-export_type([opt/0]). + +-type state() :: opt() | [{module(), any()}]. +-export_type([state/0]). + +-callback init(pid(), any(), cow_http:status(), + cow_http:headers(), map()) -> {ok, any()} | disable. +%% @todo Make fin | nofin its own type. +-callback handle(fin | nofin, any(), State) + -> {ok, any(), State} | {done, State} when State::any(). + +-spec init(pid(), any(), cow_http:status(), + cow_http:headers(), State) -> State when State::state(). +init(_, _, _, _, []) -> + []; +init(ReplyTo, StreamRef, Status, Headers, [Handler|Tail]) -> + {Mod, Opts} = case Handler of + Tuple = {_, _} -> Tuple; + Atom -> {Atom, #{}} + end, + case Mod:init(ReplyTo, StreamRef, Status, Headers, Opts) of + {ok, State} -> [{Mod, State}|init(ReplyTo, StreamRef, Status, Headers, Tail)]; + disable -> init(ReplyTo, StreamRef, Status, Headers, Tail) + end. + +-spec handle(fin | nofin, any(), State) -> State when State::state(). +handle(_, _, []) -> + []; +handle(IsFin, Data0, [{Mod, State0}|Tail]) -> + case Mod:handle(IsFin, Data0, State0) of + {ok, Data, State} -> [{Mod, State}|handle(IsFin, Data, Tail)]; + {done, State} -> [{Mod, State}|Tail] + end. + +-spec check_option(list()) -> ok | error. +check_option([]) -> + error; +check_option(Opt) -> + check_option1(Opt). + +check_option1([]) -> + ok; +check_option1([Atom|Tail]) when is_atom(Atom) -> + check_option1(Tail); +check_option1([{Atom, #{}}|Tail]) when is_atom(Atom) -> + check_option1(Tail); +check_option1(_) -> + error. diff --git a/deps/gun/src/gun_data_h.erl b/deps/gun/src/gun_data_h.erl new file mode 100644 index 0000000000000000000000000000000000000000..30f07cef5ab37ce7e5612873a2371c5d60aaec01 --- /dev/null +++ b/deps/gun/src/gun_data_h.erl @@ -0,0 +1,33 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_data_h). +-behavior(gun_content_handler). + +-export([init/5]). +-export([handle/3]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference() +}). + +-spec init(pid(), reference(), _, _, _) -> {ok, #state{}}. +init(ReplyTo, StreamRef, _, _, _) -> + {ok, #state{reply_to=ReplyTo, stream_ref=StreamRef}}. + +-spec handle(fin | nofin, binary(), State) -> {done, State} when State::#state{}. +handle(IsFin, Data, State=#state{reply_to=ReplyTo, stream_ref=StreamRef}) -> + ReplyTo ! {gun_data, self(), StreamRef, IsFin, Data}, + {done, State}. diff --git a/deps/gun/src/gun_http.erl b/deps/gun/src/gun_http.erl new file mode 100644 index 0000000000000000000000000000000000000000..abd4fc5d9efe026482e505ae5141e23862dbb281 --- /dev/null +++ b/deps/gun/src/gun_http.erl @@ -0,0 +1,672 @@ +%% Copyright (c) 2014-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_http). + +-export([check_options/1]). +-export([name/0]). +-export([init/4]). +-export([handle/2]). +-export([close/1]). +-export([keepalive/1]). +-export([request/8]). +-export([request/9]). +-export([data/5]). +-export([connect/5]). +-export([cancel/3]). +-export([down/1]). +-export([ws_upgrade/7]). + +-type io() :: head | {body, non_neg_integer()} | body_close | body_chunked | body_trailer. + +%% @todo Make that a record. +-type connect_info() :: {connect, reference(), gun:connect_destination()}. + +%% @todo Make that a record. +-type websocket_info() :: {websocket, reference(), binary(), [binary()], gun:ws_opts()}. %% key, extensions, options + +-record(stream, { + ref :: reference() | connect_info() | websocket_info(), + reply_to :: pid(), + method :: binary(), + is_alive :: boolean(), + handler_state :: undefined | gun_content_handler:state() +}). + +-record(http_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + version = 'HTTP/1.1' :: cow_http:version(), + content_handlers :: gun_content_handler:opt(), + connection = keepalive :: keepalive | close, + buffer = <<>> :: binary(), + streams = [] :: [#stream{}], + in = head :: io(), + in_state = {0, 0} :: {non_neg_integer(), non_neg_integer()}, + out = head :: io(), + transform_header_name :: fun((binary()) -> binary()) +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([Opt={content_handlers, Handlers}|Opts]) -> + case gun_content_handler:check_option(Handlers) of + ok -> do_check_options(Opts); + error -> {error, {options, {http, Opt}}} + end; +do_check_options([{keepalive, infinity}|Opts]) -> + do_check_options(Opts); +do_check_options([{keepalive, K}|Opts]) when is_integer(K), K > 0 -> + do_check_options(Opts); +do_check_options([{transform_header_name, F}|Opts]) when is_function(F) -> + do_check_options(Opts); +do_check_options([{version, V}|Opts]) when V =:= 'HTTP/1.1'; V =:= 'HTTP/1.0' -> + do_check_options(Opts); +do_check_options([Opt|_]) -> + {error, {options, {http, Opt}}}. + +name() -> http. + +init(Owner, Socket, Transport, Opts) -> + Version = maps:get(version, Opts, 'HTTP/1.1'), + Handlers = maps:get(content_handlers, Opts, [gun_data_h]), + TransformHeaderName = maps:get(transform_header_name, Opts, fun (N) -> N end), + #http_state{owner=Owner, socket=Socket, transport=Transport, version=Version, + content_handlers=Handlers, transform_header_name=TransformHeaderName}. + +%% Stop looping when we got no more data. +handle(<<>>, State) -> + {state, State}; +%% Close when server responds and we don't have any open streams. +handle(_, #http_state{streams=[]}) -> + close; +%% Wait for the full response headers before trying to parse them. +handle(Data, State=#http_state{in=head, buffer=Buffer}) -> + Data2 = << Buffer/binary, Data/binary >>, + case binary:match(Data2, <<"\r\n\r\n">>) of + nomatch -> {state, State#http_state{buffer=Data2}}; + {_, _} -> handle_head(Data2, State#http_state{buffer= <<>>}) + end; +%% Everything sent to the socket until it closes is part of the response body. +handle(Data, State=#http_state{in=body_close}) -> + {state, send_data_if_alive(Data, State, nofin)}; +%% Chunked transfer-encoding may contain both data and trailers. +handle(Data, State=#http_state{in=body_chunked, in_state=InState, + buffer=Buffer, connection=Conn}) -> + Buffer2 = << Buffer/binary, Data/binary >>, + case cow_http_te:stream_chunked(Buffer2, InState) of + more -> + {state, State#http_state{buffer=Buffer2}}; + {more, Data2, InState2} -> + {state, send_data_if_alive(Data2, + State#http_state{buffer= <<>>, in_state=InState2}, + nofin)}; + {more, Data2, Length, InState2} when is_integer(Length) -> + %% @todo See if we can recv faster than one message at a time. + {state, send_data_if_alive(Data2, + State#http_state{buffer= <<>>, in_state=InState2}, + nofin)}; + {more, Data2, Rest, InState2} -> + %% @todo See if we can recv faster than one message at a time. + {state, send_data_if_alive(Data2, + State#http_state{buffer=Rest, in_state=InState2}, + nofin)}; + {done, HasTrailers, Rest} -> + IsFin = case HasTrailers of + trailers -> nofin; + no_trailers -> fin + end, + %% I suppose it doesn't hurt to append an empty binary. + State1 = send_data_if_alive(<<>>, State, IsFin), + case {HasTrailers, Conn} of + {trailers, _} -> + handle(Rest, State1#http_state{buffer = <<>>, in=body_trailer}); + {no_trailers, keepalive} -> + handle(Rest, end_stream(State1#http_state{buffer= <<>>})); + {no_trailers, close} -> + close + end; + {done, Data2, HasTrailers, Rest} -> + IsFin = case HasTrailers of + trailers -> nofin; + no_trailers -> fin + end, + State1 = send_data_if_alive(Data2, State, IsFin), + case {HasTrailers, Conn} of + {trailers, _} -> + handle(Rest, State1#http_state{buffer = <<>>, in=body_trailer}); + {no_trailers, keepalive} -> + handle(Rest, end_stream(State1#http_state{buffer= <<>>})); + {no_trailers, close} -> + close + end + end; +handle(Data, State=#http_state{in=body_trailer, buffer=Buffer, connection=Conn, + streams=[#stream{ref=StreamRef, reply_to=ReplyTo}|_]}) -> + Data2 = << Buffer/binary, Data/binary >>, + case binary:match(Data2, <<"\r\n\r\n">>) of + nomatch -> {state, State#http_state{buffer=Data2}}; + {_, _} -> + {Trailers, Rest} = cow_http:parse_headers(Data2), + %% @todo We probably want to pass this to gun_content_handler? + ReplyTo ! {gun_trailers, self(), stream_ref(StreamRef), Trailers}, + case Conn of + keepalive -> + handle(Rest, end_stream(State#http_state{buffer= <<>>})); + close -> + close + end + end; +%% We know the length of the rest of the body. +handle(Data, State=#http_state{in={body, Length}, connection=Conn}) -> + DataSize = byte_size(Data), + if + %% More data coming. + DataSize < Length -> + {state, send_data_if_alive(Data, + State#http_state{in={body, Length - DataSize}}, + nofin)}; + %% Stream finished, no rest. + DataSize =:= Length -> + State1 = send_data_if_alive(Data, State, fin), + case Conn of + keepalive -> {state, end_stream(State1)}; + close -> close + end; + %% Stream finished, rest. + true -> + << Body:Length/binary, Rest/bits >> = Data, + State1 = send_data_if_alive(Body, State, fin), + case Conn of + keepalive -> handle(Rest, end_stream(State1)); + close -> close + end + end. + +handle_head(Data, State=#http_state{socket=Socket, version=ClientVersion, + content_handlers=Handlers0, connection=Conn, + streams=[Stream=#stream{ref=StreamRef, reply_to=ReplyTo, + method=Method, is_alive=IsAlive}|Tail]}) -> + {Version, Status, _, Rest} = cow_http:parse_status_line(Data), + {Headers, Rest2} = cow_http:parse_headers(Rest), + case {Status, StreamRef} of + {101, {websocket, RealStreamRef, WsKey, WsExtensions, WsOpts}} -> + ws_handshake(Rest2, State, RealStreamRef, Headers, WsKey, WsExtensions, WsOpts); + {_, {connect, RealStreamRef, Destination}} when Status >= 200, Status < 300 -> + case IsAlive of + false -> + ok; + true -> + ReplyTo ! {gun_response, self(), RealStreamRef, + fin, Status, Headers}, + ok + end, + %% We expect there to be no additional data after the CONNECT response. + <<>> = Rest2, + State2 = end_stream(State#http_state{streams=[Stream|Tail]}), + NewHost = maps:get(host, Destination), + NewPort = maps:get(port, Destination), + case Destination of + #{transport := tls} -> + TLSOpts = maps:get(tls_opts, Destination, []), + TLSTimeout = maps:get(tls_handshake_timeout, Destination, infinity), + case gun_tls:connect(Socket, TLSOpts, TLSTimeout) of + {ok, TLSSocket} -> + case ssl:negotiated_protocol(TLSSocket) of + {ok, <<"h2">>} -> + [{origin, <<"https">>, NewHost, NewPort, connect}, + {switch_transport, gun_tls, TLSSocket}, + {switch_protocol, gun_http2, State2}]; + _ -> + [{state, State2#http_state{socket=TLSSocket, transport=gun_tls}}, + {origin, <<"https">>, NewHost, NewPort, connect}, + {switch_transport, gun_tls, TLSSocket}] + end; + Error -> + Error + end; + _ -> + case maps:get(protocols, Destination, [http]) of + [http] -> + [{state, State2}, + {origin, <<"http">>, NewHost, NewPort, connect}]; + [http2] -> + [{origin, <<"http">>, NewHost, NewPort, connect}, + {switch_protocol, gun_http2, State2}] + end + end; + {_, _} when Status >= 100, Status =< 199 -> + ReplyTo ! {gun_inform, self(), stream_ref(StreamRef), Status, Headers}, + handle(Rest2, State); + _ -> + In = response_io_from_headers(Method, Version, Status, Headers), + IsFin = case In of head -> fin; _ -> nofin end, + Handlers = case IsAlive of + false -> + undefined; + true -> + ReplyTo ! {gun_response, self(), stream_ref(StreamRef), + IsFin, Status, Headers}, + case IsFin of + fin -> undefined; + nofin -> + gun_content_handler:init(ReplyTo, StreamRef, + Status, Headers, Handlers0) + end + end, + Conn2 = if + Conn =:= close -> close; + Version =:= 'HTTP/1.0' -> close; + ClientVersion =:= 'HTTP/1.0' -> close; + true -> conn_from_headers(Version, Headers) + end, + %% We always reset in_state even if not chunked. + if + IsFin =:= fin, Conn2 =:= close -> + close; + IsFin =:= fin -> + handle(Rest2, end_stream(State#http_state{in=In, + in_state={0, 0}, connection=Conn2, + streams=[Stream#stream{handler_state=Handlers}|Tail]})); + true -> + handle(Rest2, State#http_state{in=In, + in_state={0, 0}, connection=Conn2, + streams=[Stream#stream{handler_state=Handlers}|Tail]}) + end + end. + +stream_ref({connect, StreamRef, _}) -> StreamRef; +stream_ref({websocket, StreamRef, _, _, _}) -> StreamRef; +stream_ref(StreamRef) -> StreamRef. + +send_data_if_alive(<<>>, State, nofin) -> + State; +%% @todo What if we receive data when the HEAD method was used? +send_data_if_alive(Data, State=#http_state{streams=[Stream=#stream{ + is_alive=true, handler_state=Handlers0}|Tail]}, IsFin) -> + Handlers = gun_content_handler:handle(IsFin, Data, Handlers0), + State#http_state{streams=[Stream#stream{handler_state=Handlers}|Tail]}; +send_data_if_alive(_, State, _) -> + State. + +close(State=#http_state{in=body_close, streams=[_|Tail]}) -> + _ = send_data_if_alive(<<>>, State, fin), + close_streams(Tail); +close(#http_state{streams=Streams}) -> + close_streams(Streams). + +close_streams([]) -> + ok; +close_streams([#stream{is_alive=false}|Tail]) -> + close_streams(Tail); +close_streams([#stream{ref=StreamRef, reply_to=ReplyTo}|Tail]) -> + ReplyTo ! {gun_error, self(), StreamRef, {closed, + "The connection was lost."}}, + close_streams(Tail). + +%% We don't send a keep-alive when a CONNECT request was initiated. +keepalive(State=#http_state{streams=[#stream{ref={connect, _, _}}]}) -> + State; +%% We can only keep-alive by sending an empty line in-between streams. +keepalive(State=#http_state{socket=Socket, transport=Transport, out=head}) -> + Transport:send(Socket, <<"\r\n">>), + State; +keepalive(State) -> + State. + +request(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers) -> + Host2 = case Host of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host + end, + Headers2 = lists:keydelete(<<"transfer-encoding">>, 1, Headers), + Headers3 = case lists:keymember(<<"host">>, 1, Headers) of + false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2]; + true -> Headers2 + end, + %% We use Headers2 because this is the smallest list. + Conn = conn_from_headers(Version, Headers2), + Out = request_io_from_headers(Headers2), + Headers4 = case Out of + body_chunked when Version =:= 'HTTP/1.0' -> Headers3; + body_chunked -> [{<<"transfer-encoding">>, <<"chunked">>}|Headers3]; + _ -> Headers3 + end, + Headers5 = transform_header_names(State, Headers4), + Transport:send(Socket, cow_http:request(Method, Path, Version, Headers5)), + new_stream(State#http_state{connection=Conn, out=Out}, StreamRef, ReplyTo, Method). + +request(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers, Body) -> + Host2 = case Host of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host + end, + Headers2 = lists:keydelete(<<"content-length">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, Headers)), + Headers3 = case lists:keymember(<<"host">>, 1, Headers) of + false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2]; + true -> Headers2 + end, + Headers4 = transform_header_names(State, Headers3), + %% We use Headers2 because this is the smallest list. + Conn = conn_from_headers(Version, Headers2), + Transport:send(Socket, [ + cow_http:request(Method, Path, Version, [ + {<<"content-length">>, integer_to_binary(iolist_size(Body))} + |Headers4]), + Body]), + new_stream(State#http_state{connection=Conn}, StreamRef, ReplyTo, Method). + +transform_header_names(#http_state{transform_header_name = Fun}, Headers) -> + lists:keymap(Fun, 1, Headers). + +%% We are expecting a new stream. +data(State=#http_state{out=head}, StreamRef, ReplyTo, _, _) -> + error_stream_closed(State, StreamRef, ReplyTo); +%% There are no active streams. +data(State=#http_state{streams=[]}, StreamRef, ReplyTo, _, _) -> + error_stream_not_found(State, StreamRef, ReplyTo); +%% We can only send data on the last created stream. +data(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=Out, streams=Streams}, StreamRef, ReplyTo, IsFin, Data) -> + case lists:last(Streams) of + #stream{ref=StreamRef, is_alive=true} -> + DataLength = iolist_size(Data), + case Out of + body_chunked when Version =:= 'HTTP/1.1', IsFin =:= fin -> + case Data of + <<>> -> + Transport:send(Socket, cow_http_te:last_chunk()); + _ -> + Transport:send(Socket, [ + cow_http_te:chunk(Data), + cow_http_te:last_chunk() + ]) + end, + State#http_state{out=head}; + body_chunked when Version =:= 'HTTP/1.1' -> + Transport:send(Socket, cow_http_te:chunk(Data)), + State; + {body, Length} when DataLength =< Length -> + Transport:send(Socket, Data), + Length2 = Length - DataLength, + if + Length2 =:= 0, IsFin =:= fin -> + State#http_state{out=head}; + Length2 > 0, IsFin =:= nofin -> + State#http_state{out={body, Length2}} + end; + body_chunked -> %% HTTP/1.0 + Transport:send(Socket, Data), + State + end; + _ -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +connect(State=#http_state{streams=Streams}, StreamRef, ReplyTo, _, _) when Streams =/= [] -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "CONNECT can only be used with HTTP/1.1 when no other streams are active."}}, + State; +connect(State=#http_state{socket=Socket, transport=Transport, version=Version}, + StreamRef, ReplyTo, Destination=#{host := Host0}, Headers0) -> + Host = case Host0 of + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host0 + end, + Port = maps:get(port, Destination, 1080), + Authority = [Host, $:, integer_to_binary(Port)], + Headers1 = lists:keydelete(<<"content-length">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, Headers0)), + Headers2 = case lists:keymember(<<"host">>, 1, Headers1) of + false -> [{<<"host">>, Authority}|Headers1]; + true -> Headers1 + end, + HasProxyAuthorization = lists:keymember(<<"proxy-authorization">>, 1, Headers2), + Headers3 = case {HasProxyAuthorization, Destination} of + {false, #{username := UserID, password := Password}} -> + [{<<"proxy-authorization">>, [ + <<"Basic ">>, + base64:encode(iolist_to_binary([UserID, $:, Password]))]} + |Headers2]; + _ -> + Headers2 + end, + Headers = transform_header_names(State, Headers3), + Transport:send(Socket, [ + cow_http:request(<<"CONNECT">>, Authority, Version, Headers) + ]), + new_stream(State, {connect, StreamRef, Destination}, ReplyTo, <<"CONNECT">>). + +%% We can't cancel anything, we can just stop forwarding messages to the owner. +cancel(State, StreamRef, ReplyTo) -> + case is_stream(State, StreamRef) of + true -> + cancel_stream(State, StreamRef); + false -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +%% HTTP does not provide any way to figure out what streams are unprocessed. +down(#http_state{streams=Streams}) -> + KilledStreams = [case Ref of + {connect, Ref2, _} -> Ref2; + {websocket, Ref2, _, _, _} -> Ref2; + _ -> Ref + end || #stream{ref=Ref} <- Streams], + {KilledStreams, []}. + +error_stream_closed(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream has already been closed."}}, + State. + +error_stream_not_found(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream cannot be found."}}, + State. + +%% Headers information retrieval. + +conn_from_headers(Version, Headers) -> + case lists:keyfind(<<"connection">>, 1, Headers) of + false when Version =:= 'HTTP/1.0' -> + close; + false -> + keepalive; + {_, ConnHd} -> + ConnList = cow_http_hd:parse_connection(ConnHd), + case lists:member(<<"keep-alive">>, ConnList) of + true -> keepalive; + false -> close + end + end. + +request_io_from_headers(Headers) -> + case lists:keyfind(<<"content-length">>, 1, Headers) of + {_, <<"0">>} -> + head; + {_, Length} -> + {body, cow_http_hd:parse_content_length(Length)}; + _ -> + case lists:keymember(<<"content-type">>, 1, Headers) of + true -> body_chunked; + false -> head + end + end. + +response_io_from_headers(<<"HEAD">>, _, _, _) -> + head; +response_io_from_headers(_, _, Status, _) when (Status =:= 204) or (Status =:= 304) -> + head; +response_io_from_headers(_, Version, _Status, Headers) -> + case lists:keyfind(<<"transfer-encoding">>, 1, Headers) of + {_, TE} when Version =:= 'HTTP/1.1' -> + case cow_http_hd:parse_transfer_encoding(TE) of + [<<"chunked">>] -> body_chunked; + [<<"identity">>] -> body_close + end; + _ -> + case lists:keyfind(<<"content-length">>, 1, Headers) of + {_, <<"0">>} -> + head; + {_, Length} -> + {body, cow_http_hd:parse_content_length(Length)}; + _ -> + body_close + end + end. + +%% Streams. + +new_stream(State=#http_state{streams=Streams}, StreamRef, ReplyTo, Method) -> + State#http_state{streams=Streams + ++ [#stream{ref=StreamRef, reply_to=ReplyTo, + method=iolist_to_binary(Method), is_alive=true}]}. + +is_stream(#http_state{streams=Streams}, StreamRef) -> + lists:keymember(StreamRef, #stream.ref, Streams). + +cancel_stream(State=#http_state{streams=Streams}, StreamRef) -> + Streams2 = [case Ref of + StreamRef -> + Tuple#stream{is_alive=false}; + _ -> + Tuple + end || Tuple = #stream{ref=Ref} <- Streams], + State#http_state{streams=Streams2}. + +end_stream(State=#http_state{streams=[_|Tail]}) -> + State#http_state{in=head, streams=Tail}. + +%% Websocket upgrade. + +%% Ensure version is 1.1. +ws_upgrade(#http_state{version='HTTP/1.0'}, _, _, _, _, _, _) -> + error; %% @todo +ws_upgrade(State=#http_state{socket=Socket, transport=Transport, owner=Owner, out=head}, + StreamRef, Host, Port, Path, Headers0, WsOpts) -> + {Headers1, GunExtensions} = case maps:get(compress, WsOpts, false) of + true -> {[{<<"sec-websocket-extensions">>, + <<"permessage-deflate; client_max_window_bits; server_max_window_bits=15">>} + |Headers0], + [<<"permessage-deflate">>]}; + false -> {Headers0, []} + end, + Headers2 = case maps:get(protocols, WsOpts, []) of + [] -> Headers1; + ProtoOpt -> + << _, _, Proto/bits >> = iolist_to_binary([[<<", ">>, P] || {P, _} <- ProtoOpt]), + [{<<"sec-websocket-protocol">>, Proto}|Headers1] + end, + Key = cow_ws:key(), + Headers3 = [ + {<<"connection">>, <<"upgrade">>}, + {<<"upgrade">>, <<"websocket">>}, + {<<"sec-websocket-version">>, <<"13">>}, + {<<"sec-websocket-key">>, Key} + |Headers2 + ], + IsSecure = Transport =:= gun_tls, + Headers = case lists:keymember(<<"host">>, 1, Headers0) of + true -> Headers3; + false when Port =:= 80, not IsSecure -> [{<<"host">>, Host}|Headers3]; + false when Port =:= 443, IsSecure -> [{<<"host">>, Host}|Headers3]; + false -> [{<<"host">>, [Host, $:, integer_to_binary(Port)]}|Headers3] + end, + Transport:send(Socket, cow_http:request(<<"GET">>, Path, 'HTTP/1.1', Headers)), + new_stream(State#http_state{connection=keepalive, out=head}, + {websocket, StreamRef, Key, GunExtensions, WsOpts}, Owner, <<"GET">>). + +ws_handshake(Buffer, State, StreamRef, Headers, Key, GunExtensions, Opts) -> + %% @todo check upgrade, connection + case lists:keyfind(<<"sec-websocket-accept">>, 1, Headers) of + false -> + close; + {_, Accept} -> + case cow_ws:encode_key(Key) of + Accept -> + ws_handshake_extensions(Buffer, State, StreamRef, + Headers, GunExtensions, Opts); + _ -> + close + end + end. + +ws_handshake_extensions(Buffer, State, StreamRef, Headers, GunExtensions, Opts) -> + case lists:keyfind(<<"sec-websocket-extensions">>, 1, Headers) of + false -> + ws_handshake_protocols(Buffer, State, StreamRef, Headers, #{}, Opts); + {_, ExtHd} -> + case ws_validate_extensions(cow_http_hd:parse_sec_websocket_extensions(ExtHd), GunExtensions, #{}, Opts) of + close -> + close; + Extensions -> + ws_handshake_protocols(Buffer, State, StreamRef, Headers, Extensions, Opts) + end + end. + +ws_validate_extensions([], _, Acc, _) -> + Acc; +ws_validate_extensions([{Name = <<"permessage-deflate">>, Params}|Tail], GunExts, Acc, Opts) -> + case lists:member(Name, GunExts) of + true -> + case cow_ws:validate_permessage_deflate(Params, Acc, Opts) of + {ok, Acc2} -> ws_validate_extensions(Tail, GunExts, Acc2, Opts); + error -> close + end; + %% Fail the connection if extension was not requested. + false -> + close + end; +%% Fail the connection on unknown extension. +ws_validate_extensions(_, _, _, _) -> + close. + +%% @todo Validate protocols. +ws_handshake_protocols(Buffer, State, StreamRef, Headers, Extensions, Opts) -> + case lists:keyfind(<<"sec-websocket-protocol">>, 1, Headers) of + false -> + ws_handshake_end(Buffer, State, StreamRef, Headers, Extensions, + maps:get(default_protocol, Opts, gun_ws_h), Opts); + {_, Proto} -> + ProtoOpt = maps:get(protocols, Opts, []), + case lists:keyfind(Proto, 1, ProtoOpt) of + {_, Handler} -> + ws_handshake_end(Buffer, State, StreamRef, + Headers, Extensions, Handler, Opts); + false -> + close + end + end. + +ws_handshake_end(Buffer, #http_state{owner=Owner, socket=Socket, transport=Transport}, + StreamRef, Headers, Extensions, Handler, Opts) -> + %% Send ourselves the remaining buffer, if any. + _ = case Buffer of + <<>> -> + ok; + _ -> + {OK, _, _} = Transport:messages(), + self() ! {OK, Socket, Buffer} + end, + gun_ws:init(Owner, Socket, Transport, StreamRef, Headers, Extensions, Handler, Opts). diff --git a/deps/gun/src/gun_http2.erl b/deps/gun/src/gun_http2.erl new file mode 100644 index 0000000000000000000000000000000000000000..dcc1c887157303822d182ed09f33f9726d6725cd --- /dev/null +++ b/deps/gun/src/gun_http2.erl @@ -0,0 +1,707 @@ +%% Copyright (c) 2016-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_http2). + +-export([check_options/1]). +-export([name/0]). +-export([init/4]). +-export([handle/2]). +-export([close/1]). +-export([keepalive/1]). +-export([request/8]). +-export([request/9]). +-export([data/5]). +-export([cancel/3]). +-export([down/1]). + +-record(stream, { + id :: non_neg_integer(), + ref :: reference(), + reply_to :: pid(), + %% Whether we finished sending data. + local = nofin :: fin | nofin, + %% Local flow control window (how much we can send). + local_window :: integer(), + %% Buffered data waiting for the flow control window to increase. + local_buffer = queue:new() :: queue:queue( + {fin | nofin, non_neg_integer(), iolist()}), + local_buffer_size = 0 :: non_neg_integer(), + local_trailers = undefined :: undefined | cow_http:headers(), + %% Whether we finished receiving data. + remote = nofin :: fin | nofin, + %% Remote flow control window (how much we accept to receive). + remote_window :: integer(), + %% Content handlers state. + handler_state :: undefined | gun_content_handler:state() +}). + +-record(http2_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + opts = #{} :: map(), %% @todo + content_handlers :: gun_content_handler:opt(), + buffer = <<>> :: binary(), + + local_settings = #{ + initial_window_size => 65535, + max_frame_size => 16384 + } :: map(), + remote_settings = #{ + initial_window_size => 65535 + } :: map(), + + %% Connection-wide flow control window. + local_window = 65535 :: integer(), %% How much we can send. + remote_window = 65535 :: integer(), %% How much we accept to receive. + + streams = [] :: [#stream{}], + stream_id = 1 :: non_neg_integer(), + + %% The client starts by sending a sequence of bytes as a preface, + %% followed by a potentially empty SETTINGS frame. Then the connection + %% is established and continues normally. An exception is when a HEADERS + %% frame is sent followed by CONTINUATION frames: no other frame can be + %% sent in between. + parse_state = undefined :: preface | normal + | {continuation, cowboy_stream:streamid(), cowboy_stream:fin(), binary()}, + + %% HPACK decoding and encoding state. + decode_state = cow_hpack:init() :: cow_hpack:state(), + encode_state = cow_hpack:init() :: cow_hpack:state() +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([Opt={content_handlers, Handlers}|Opts]) -> + case gun_content_handler:check_option(Handlers) of + ok -> do_check_options(Opts); + error -> {error, {options, {http, Opt}}} + end; +do_check_options([{keepalive, infinity}|Opts]) -> + do_check_options(Opts); +do_check_options([{keepalive, K}|Opts]) when is_integer(K), K > 0 -> + do_check_options(Opts); +%% @todo max_frame_size_sent +do_check_options([Opt|_]) -> + {error, {options, {http2, Opt}}}. + +name() -> http2. + +init(Owner, Socket, Transport, Opts) -> + Handlers = maps:get(content_handlers, Opts, [gun_data_h]), + State = #http2_state{owner=Owner, socket=Socket, + transport=Transport, opts=Opts, content_handlers=Handlers, + parse_state=preface}, + #http2_state{local_settings=Settings} = State, + %% Send the HTTP/2 preface. + Transport:send(Socket, [ + << "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n">>, + cow_http2:settings(Settings) + ]), + State. + +handle(Data, State=#http2_state{buffer=Buffer}) -> + parse(<< Buffer/binary, Data/binary >>, State#http2_state{buffer= <<>>}). + +parse(Data0, State0=#http2_state{buffer=Buffer, parse_state=preface}) -> + Data = << Buffer/binary, Data0/binary >>, + case cow_http2:parse(Data) of + {ok, Frame, Rest} when element(1, Frame) =:= settings -> + case frame(Frame, State0#http2_state{parse_state=normal}) of + close -> close; + Error = {error, _} -> Error; + State -> parse(Rest, State) + end; + more -> + case Data of + %% Maybe we have a proper SETTINGS frame. + <<_:24,4:8,_/bits>> -> + {state, State0#http2_state{buffer=Data}}; + %% Not a SETTINGS frame, this is an invalid preface. + <<"HTTP/1",_/bits>> -> + terminate(State0, {connection_error, protocol_error, + 'Invalid connection preface received. Appears to be an HTTP/1 response? (RFC7540 3.5)'}); + _ -> + terminate(State0, {connection_error, protocol_error, + 'Invalid connection preface received. (RFC7540 3.5)'}) + end; + %% Any error in the preface is converted to this specific error + %% to make debugging the problem easier (it's the server's fault). + _ -> + Reason = case Data of + <<"HTTP/1",_/bits>> -> + 'Invalid connection preface received. Appears to be an HTTP/1 response? (RFC7540 3.5)'; + _ -> + 'Invalid connection preface received. (RFC7540 3.5)' + end, + terminate(State0, {connection_error, protocol_error, Reason}) + end; +parse(Data0, State0=#http2_state{buffer=Buffer, parse_state=PS}) -> + Data = << Buffer/binary, Data0/binary >>, + case cow_http2:parse(Data) of + {ok, Frame, Rest} when PS =:= normal -> + case frame(Frame, State0) of + close -> close; + Error = {error, _} -> Error; + State1 -> parse(Rest, State1) + end; + {ok, Frame, Rest} when element(1, PS) =:= continuation -> + case continuation_frame(Frame, State0) of + close -> close; + Error = {error, _} -> Error; + State1 -> parse(Rest, State1) + end; + {ignore, _} when element(1, PS) =:= continuation -> + terminate(State0, {connection_error, protocol_error, + 'An invalid frame was received in the middle of a header block. (RFC7540 6.2)'}); + {ignore, Rest} -> + parse(Rest, State0); + {stream_error, StreamID, Reason, Human, Rest} -> + parse(Rest, stream_reset(State0, StreamID, {stream_error, Reason, Human})); + Error = {connection_error, _, _} -> + terminate(State0, Error); + more -> + {state, State0#http2_state{buffer=Data}} + end. + +%% DATA frame. +frame({data, StreamID, IsFin, Data}, State0=#http2_state{remote_window=ConnWindow}) -> + case get_stream_by_id(StreamID, State0) of + Stream0 = #stream{remote=nofin, remote_window=StreamWindow, handler_state=Handlers0} -> + Handlers = gun_content_handler:handle(IsFin, Data, Handlers0), + {Stream, State} = send_window_update( + Stream0#stream{remote_window=StreamWindow - byte_size(Data), + handler_state=Handlers}, + State0#http2_state{remote_window=ConnWindow - byte_size(Data)}), + remote_fin(Stream, State, IsFin); + _ -> + %% @todo protocol_error if not existing + stream_reset(State0, StreamID, {stream_error, stream_closed, + 'DATA frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end; +%% Single HEADERS frame headers block. +frame({headers, StreamID, IsFin, head_fin, HeaderBlock}, State) -> + stream_decode_init(State, StreamID, IsFin, HeaderBlock); +%% HEADERS frame starting a headers block. Enter continuation mode. +frame({headers, StreamID, IsFin, head_nofin, HeaderBlockFragment}, State) -> + State#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}}; +%% Single HEADERS frame headers block with priority. +frame({headers, StreamID, IsFin, head_fin, + _IsExclusive, _DepStreamID, _Weight, HeaderBlock}, State) -> + stream_decode_init(State, StreamID, IsFin, HeaderBlock); +%% @todo HEADERS frame starting a headers block. Enter continuation mode. +%frame(State, {headers, StreamID, IsFin, head_nofin, +% _IsExclusive, _DepStreamID, _Weight, HeaderBlockFragment}) -> +% %% @todo Handle priority. +% State#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}}; +%% @todo PRIORITY frame. +%frame(State, {priority, _StreamID, _IsExclusive, _DepStreamID, _Weight}) -> +% %% @todo Validate StreamID? +% %% @todo Handle priority. +% State; +%% @todo RST_STREAM frame. +frame({rst_stream, StreamID, Reason}, State) -> + stream_reset(State, StreamID, {stream_error, Reason, 'Stream reset by server.'}); +%% SETTINGS frame. +frame({settings, Settings}, State=#http2_state{socket=Socket, transport=Transport, + remote_settings=Settings0}) -> + Transport:send(Socket, cow_http2:settings_ack()), + State#http2_state{remote_settings=maps:merge(Settings0, Settings)}; +%% Ack for a previously sent SETTINGS frame. +frame(settings_ack, State) -> %% @todo =#http2_state{next_settings=_NextSettings}) -> + %% @todo Apply SETTINGS that require synchronization. + State; +%% PUSH_PROMISE frame. +%% @todo Continuation. +frame({push_promise, StreamID, head_fin, PromisedStreamID, HeaderBlock}, + State=#http2_state{streams=Streams, decode_state=DecodeState0}) -> + case get_stream_by_id(PromisedStreamID, State) of + false -> + case get_stream_by_id(StreamID, State) of + #stream{ref=StreamRef, reply_to=ReplyTo} -> + try cow_hpack:decode(HeaderBlock, DecodeState0) of + {Headers0, DecodeState} -> + {Method, Scheme, Authority, Path, Headers} = try + {value, {_, Method0}, Headers1} = lists:keytake(<<":method">>, 1, Headers0), + {value, {_, Scheme0}, Headers2} = lists:keytake(<<":scheme">>, 1, Headers1), + {value, {_, Authority0}, Headers3} = lists:keytake(<<":authority">>, 1, Headers2), + {value, {_, Path0}, Headers4} = lists:keytake(<<":path">>, 1, Headers3), + {Method0, Scheme0, Authority0, Path0, Headers4} + catch error:badmatch -> + stream_reset(State, StreamID, {stream_error, protocol_error, + 'Malformed push promise; missing pseudo-header field. (RFC7540 8.1.2.3)'}) + end, + NewStreamRef = make_ref(), + ReplyTo ! {gun_push, self(), StreamRef, NewStreamRef, Method, + iolist_to_binary([Scheme, <<"://">>, Authority, Path]), Headers}, + NewStream = new_stream(PromisedStreamID, NewStreamRef, ReplyTo, + nofin, fin, State), + State#http2_state{streams=[NewStream|Streams], decode_state=DecodeState} + catch _:_ -> + terminate(State, {connection_error, compression_error, + 'Error while trying to decode HPACK-encoded header block. (RFC7540 4.3)'}) + end; + _ -> + stream_reset(State, StreamID, {stream_error, stream_closed, + 'DATA frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end; + _ -> + stream_reset(State, StreamID, {stream_error, todo, ''}) + end; +%% PING frame. +frame({ping, Opaque}, State=#http2_state{socket=Socket, transport=Transport}) -> + Transport:send(Socket, cow_http2:ping_ack(Opaque)), + State; +%% Ack for a previously sent PING frame. +%% +%% @todo Might want to check contents but probably a waste of time. +frame({ping_ack, _Opaque}, State) -> + State; +%% GOAWAY frame. +frame(Frame={goaway, StreamID, _, _}, State) -> + terminate(State, StreamID, {stop, Frame, 'Client is going away.'}); +%% Connection-wide WINDOW_UPDATE frame. +frame({window_update, Increment}, State=#http2_state{local_window=ConnWindow}) + when ConnWindow + Increment > 16#7fffffff -> + terminate(State, {connection_error, flow_control_error, + 'The flow control window must not be greater than 2^31-1. (RFC7540 6.9.1)'}); +frame({window_update, Increment}, State=#http2_state{local_window=ConnWindow}) -> + send_data(State#http2_state{local_window=ConnWindow + Increment}); +%% Stream-specific WINDOW_UPDATE frame. +frame({window_update, StreamID, Increment}, State0=#http2_state{streams=Streams0}) -> + case lists:keyfind(StreamID, #stream.id, Streams0) of + #stream{local_window=StreamWindow} when StreamWindow + Increment > 16#7fffffff -> + stream_reset(State0, StreamID, {stream_error, flow_control_error, + 'The flow control window must not be greater than 2^31-1. (RFC7540 6.9.1)'}); + Stream0 = #stream{local_window=StreamWindow} -> + {State, Stream} = send_data(State0, + Stream0#stream{local_window=StreamWindow + Increment}), + Streams = lists:keystore(StreamID, #stream.id, Streams0, Stream), + State#http2_state{streams=Streams}; + false -> + %% @todo Receiving this frame on a stream in the idle state is an error. + %% WINDOW_UPDATE frames may be received for a short period of time + %% after a stream is closed. They must be ignored. + State0 + end; +%% Unexpected CONTINUATION frame. +frame({continuation, StreamID, _, _}, State) -> + terminate(State, StreamID, {connection_error, protocol_error, + 'CONTINUATION frames MUST be preceded by a HEADERS frame. (RFC7540 6.10)'}). + +continuation_frame({continuation, StreamID, head_fin, HeaderBlockFragment1}, + State=#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment0}}) -> + HeaderBlock = << HeaderBlockFragment0/binary, HeaderBlockFragment1/binary >>, + stream_decode_init(State#http2_state{parse_state=normal}, StreamID, IsFin, HeaderBlock); +continuation_frame({continuation, StreamID, head_nofin, HeaderBlockFragment1}, + State=#http2_state{parse_state= + {continuation, StreamID, IsFin, HeaderBlockFragment0}}) -> + State#http2_state{parse_state={continuation, StreamID, IsFin, + << HeaderBlockFragment0/binary, HeaderBlockFragment1/binary >>}}; +continuation_frame(_, State) -> + terminate(State, {connection_error, protocol_error, + 'An invalid frame was received in the middle of a header block. (RFC7540 6.2)'}). + +send_window_update(Stream=#stream{id=StreamID, remote_window=StreamWindow0}, + State=#http2_state{socket=Socket, transport=Transport, remote_window=ConnWindow0}) -> + %% @todo We should make the windows configurable. + MinConnWindow = 8000000, + MinStreamWindow = 1000000, + ConnWindow = if + ConnWindow0 =< MinConnWindow -> + Transport:send(Socket, cow_http2:window_update(MinConnWindow)), + ConnWindow0 + MinConnWindow; + true -> + ConnWindow0 + end, + StreamWindow = if + StreamWindow0 =< MinStreamWindow -> + Transport:send(Socket, cow_http2:window_update(StreamID, MinStreamWindow)), + StreamWindow0 + MinStreamWindow; + true -> + StreamWindow0 + end, + {Stream#stream{remote_window=StreamWindow}, + State#http2_state{remote_window=ConnWindow}}. + +close(#http2_state{streams=Streams}) -> + close_streams(Streams). + +close_streams([]) -> + ok; +close_streams([#stream{ref=StreamRef, reply_to=ReplyTo}|Tail]) -> + ReplyTo ! {gun_error, self(), StreamRef, {closed, + "The connection was lost."}}, + close_streams(Tail). + +keepalive(State=#http2_state{socket=Socket, transport=Transport}) -> + Transport:send(Socket, cow_http2:ping(0)), + State. + +request(State=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0, + streams=Streams, stream_id=StreamID}, StreamRef, ReplyTo, + Method, Host, Port, Path, Headers) -> + {HeaderBlock, EncodeState} = prepare_headers(EncodeState0, Transport, Method, Host, Port, Path, Headers), + IsFin = case (false =/= lists:keyfind(<<"content-type">>, 1, Headers)) + orelse (false =/= lists:keyfind(<<"content-length">>, 1, Headers)) of + true -> nofin; + false -> fin + end, + Transport:send(Socket, cow_http2:headers(StreamID, IsFin, HeaderBlock)), + Stream = new_stream(StreamID, StreamRef, ReplyTo, nofin, IsFin, State), + State#http2_state{streams=[Stream|Streams], stream_id=StreamID + 2, encode_state=EncodeState}. + +%% @todo Handle Body > 16MB. (split it out into many frames) +request(State0=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0, + streams=Streams, stream_id=StreamID}, StreamRef, ReplyTo, + Method, Host, Port, Path, Headers0, Body) -> + Headers = lists:keystore(<<"content-length">>, 1, Headers0, + {<<"content-length">>, integer_to_binary(iolist_size(Body))}), + {HeaderBlock, EncodeState} = prepare_headers(EncodeState0, Transport, Method, Host, Port, Path, Headers), + Transport:send(Socket, cow_http2:headers(StreamID, nofin, HeaderBlock)), + Stream0 = new_stream(StreamID, StreamRef, ReplyTo, nofin, nofin, State0), + {State, Stream} = send_data(State0, Stream0, fin, Body), + State#http2_state{streams=[Stream|Streams], stream_id=StreamID + 2, encode_state=EncodeState}. + +prepare_headers(EncodeState, Transport, Method, Host0, Port, Path, Headers0) -> + Host2 = case Host0 of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host0 + end, + Authority = case lists:keyfind(<<"host">>, 1, Headers0) of + {_, Host} -> Host; + _ -> [Host2, $:, integer_to_binary(Port)] + end, + %% @todo We also must remove any header found in the connection header. + Headers1 = + lists:keydelete(<<"host">>, 1, + lists:keydelete(<<"connection">>, 1, + lists:keydelete(<<"keep-alive">>, 1, + lists:keydelete(<<"proxy-connection">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, + lists:keydelete(<<"upgrade">>, 1, Headers0)))))), + Headers = [ + {<<":method">>, Method}, + {<<":scheme">>, case Transport of + gun_tls -> <<"https">>; + gun_tcp -> <<"http">> + end}, + {<<":authority">>, Authority}, + {<<":path">>, Path} + |Headers1], + cow_hpack:encode(Headers, EncodeState). + +data(State0, StreamRef, ReplyTo, IsFin, Data) -> + case get_stream_by_ref(StreamRef, State0) of + #stream{local=fin} -> + error_stream_closed(State0, StreamRef, ReplyTo); + Stream0 = #stream{} -> + {State, Stream} = send_data(State0, Stream0, IsFin, Data), + maybe_delete_stream(State, Stream); + false -> + error_stream_not_found(State0, StreamRef, ReplyTo) + end. + +%% @todo Should we ever want to implement the PRIORITY mechanism, +%% this would be the place to do it. Right now, we just go over +%% all streams and send what we can until either everything is +%% sent or we run out of space in the window. +send_data(State=#http2_state{streams=Streams}) -> + resume_streams(State, Streams, []). + +%% When SETTINGS_INITIAL_WINDOW_SIZE changes we need to update +%% the local stream windows for all active streams and perhaps +%% resume sending data. +%update_streams_local_window(State=#http2_state{streams=Streams0}, Increment) -> +% Streams = [ +% S#stream{local_window=StreamWindow + Increment} +% || S=#stream{local_window=StreamWindow} <- Streams0], +% resume_streams(State, Streams, []). + +%% When we receive an ack to a SETTINGS frame we sent we need to update +%% the remote stream windows for all active streams. +%update_streams_remote_window(State=#http2_state{streams=Streams0}, Increment) -> +% Streams = [ +% S#stream{remote_window=StreamWindow + Increment} +% || S=#stream{remote_window=StreamWindow} <- Streams0], +% State#http2_state{streams=Streams}. + +resume_streams(State, [], Acc) -> + State#http2_state{streams=lists:reverse(Acc)}; +%% While technically we should never get < 0 here, let's be on the safe side. +resume_streams(State=#http2_state{local_window=ConnWindow}, Streams, Acc) + when ConnWindow =< 0 -> + State#http2_state{streams=lists:reverse(Acc, Streams)}; +%% We rely on send_data/2 to do all the necessary checks about the stream. +resume_streams(State0, [Stream0|Tail], Acc) -> + {State1, Stream} = send_data(State0, Stream0), + resume_streams(State1, Tail, [Stream|Acc]). + +send_data(State, Stream=#stream{local=Local, local_buffer_size=0, local_trailers=Trailers}) + when (Trailers =/= undefined) andalso ((Local =:= idle) orelse (Local =:= nofin)) -> + send_trailers(State, Stream#stream{local_trailers=undefined}, Trailers); +%% @todo It's possible that the stream terminates. We must remove it. +send_data(State=#http2_state{local_window=ConnWindow}, + Stream=#stream{local=IsFin, local_window=StreamWindow, local_buffer_size=BufferSize}) + when ConnWindow =< 0; IsFin =:= fin; StreamWindow =< 0; BufferSize =:= 0 -> + {State, Stream}; +send_data(State0, Stream0=#stream{local_buffer=Q0, local_buffer_size=BufferSize}) -> + %% We know there is an item in the queue. + {{value, {IsFin, DataSize, Data}}, Q} = queue:out(Q0), + {State, Stream} = send_data(State0, + Stream0#stream{local_buffer=Q, local_buffer_size=BufferSize - DataSize}, + IsFin, Data, in_r), + send_data(State, Stream). + +send_data(State, Stream, IsFin, Data) -> + send_data(State, Stream, IsFin, Data, in). + +%% We can send trailers immediately if the queue is empty, otherwise we queue. +%% We always send trailer frames even if the window is empty. +send_data(State, Stream=#stream{local_buffer_size=0}, fin, {trailers, Trailers}, _) -> + send_trailers(State, Stream, Trailers); +send_data(State, Stream, fin, {trailers, Trailers}, _) -> + {State, Stream#stream{local_trailers=Trailers}}; +%% Send data immediately if we can, buffer otherwise. +send_data(State=#http2_state{local_window=ConnWindow}, + Stream=#stream{local_window=StreamWindow}, IsFin, Data, In) + when ConnWindow =< 0; StreamWindow =< 0 -> + {State, queue_data(Stream, IsFin, Data, In)}; +send_data(State=#http2_state{socket=Socket, transport=Transport, opts=Opts, + remote_settings=RemoteSettings, local_window=ConnWindow}, + Stream=#stream{id=StreamID, local_window=StreamWindow}, IsFin, Data, In) -> + RemoteMaxFrameSize = maps:get(max_frame_size, RemoteSettings, 16384), + ConfiguredMaxFrameSize = maps:get(max_frame_size_sent, Opts, infinity), + MaxSendSize = min( + min(ConnWindow, StreamWindow), + min(RemoteMaxFrameSize, ConfiguredMaxFrameSize) + ), + case Data of +% {sendfile, Offset, Bytes, Path} when Bytes =< MaxSendSize -> +% Transport:send(Socket, cow_http2:data_header(StreamID, IsFin, Bytes)), +% Transport:sendfile(Socket, Path, Offset, Bytes), +% {State#http2_state{local_window=ConnWindow - Bytes}, +% Stream#stream{local=IsFin, local_window=StreamWindow - Bytes}}; +% {sendfile, Offset, Bytes, Path} -> +% Transport:send(Socket, cow_http2:data_header(StreamID, nofin, MaxSendSize)), +% Transport:sendfile(Socket, Path, Offset, MaxSendSize), +% send_data(State#http2_state{local_window=ConnWindow - MaxSendSize}, +% Stream#stream{local_window=StreamWindow - MaxSendSize}, +% IsFin, {sendfile, Offset + MaxSendSize, Bytes - MaxSendSize, Path}, In); + Iolist0 -> + IolistSize = iolist_size(Iolist0), + if + IolistSize =< MaxSendSize -> + Transport:send(Socket, cow_http2:data(StreamID, IsFin, Iolist0)), + {State#http2_state{local_window=ConnWindow - IolistSize}, + Stream#stream{local=IsFin, local_window=StreamWindow - IolistSize}}; + true -> + {Iolist, More} = cow_iolists:split(MaxSendSize, Iolist0), + Transport:send(Socket, cow_http2:data(StreamID, nofin, Iolist)), + send_data(State#http2_state{local_window=ConnWindow - MaxSendSize}, + Stream#stream{local_window=StreamWindow - MaxSendSize}, + IsFin, More, In) + end + end. + +send_trailers(State=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0}, + Stream=#stream{id=StreamID}, Trailers) -> + {HeaderBlock, EncodeState} = cow_hpack:encode(Trailers, EncodeState0), + Transport:send(Socket, cow_http2:headers(StreamID, fin, HeaderBlock)), + {State#http2_state{encode_state=EncodeState}, Stream#stream{local=fin}}. + +queue_data(Stream=#stream{local_buffer=Q0, local_buffer_size=Size0}, IsFin, Data, In) -> + DataSize = case Data of +% {sendfile, _, Bytes, _} -> Bytes; + Iolist -> iolist_size(Iolist) + end, + Q = queue:In({IsFin, DataSize, Data}, Q0), + Stream#stream{local_buffer=Q, local_buffer_size=Size0 + DataSize}. + +cancel(State=#http2_state{socket=Socket, transport=Transport}, + StreamRef, ReplyTo) -> + case get_stream_by_ref(StreamRef, State) of + #stream{id=StreamID} -> + Transport:send(Socket, cow_http2:rst_stream(StreamID, cancel)), + delete_stream(StreamID, State); + false -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +%% @todo Add unprocessed streams when GOAWAY handling is done. +down(#http2_state{streams=Streams}) -> + KilledStreams = [Ref || #stream{ref=Ref} <- Streams], + {KilledStreams, []}. + +terminate(#http2_state{socket=Socket, transport=Transport, streams=Streams}, Reason) -> + %% Because a particular stream is unknown, + %% we're sending the error message to all streams. + %% @todo We should not send duplicate messages to processes. + %% @todo We should probably also inform the owner process. + _ = [ReplyTo ! {gun_error, self(), Reason} || #stream{reply_to=ReplyTo} <- Streams], + %% @todo LastGoodStreamID + Transport:send(Socket, cow_http2:goaway(0, terminate_reason(Reason), <<>>)), + terminate_ret(Reason). + +terminate(State=#http2_state{socket=Socket, transport=Transport}, StreamID, Reason) -> + case get_stream_by_id(StreamID, State) of + #stream{reply_to=ReplyTo} -> + ReplyTo ! {gun_error, self(), Reason}, + %% @todo LastGoodStreamID + Transport:send(Socket, cow_http2:goaway(0, terminate_reason(Reason), <<>>)), + terminate_ret(Reason); + _ -> + terminate(State, Reason) + end. + +terminate_reason({connection_error, Reason, _}) -> Reason; +terminate_reason({stop, _, _}) -> no_error. + +terminate_ret(Reason={connection_error, _, _}) -> {error, Reason}; +terminate_ret(_) -> close. + +%% Stream functions. + +stream_decode_init(State=#http2_state{decode_state=DecodeState0}, StreamID, IsFin, HeaderBlock) -> + try cow_hpack:decode(HeaderBlock, DecodeState0) of + {Headers, DecodeState} -> + stream_pseudo_headers_init(State#http2_state{decode_state=DecodeState}, + StreamID, IsFin, Headers) + catch _:_ -> + terminate(State, {connection_error, compression_error, + 'Error while trying to decode HPACK-encoded header block. (RFC7540 4.3)'}) + end. + +stream_pseudo_headers_init(State, StreamID, IsFin, Headers0) -> + case pseudo_headers(Headers0, #{}) of + {ok, PseudoHeaders, Headers} -> + stream_resp_init(State, StreamID, IsFin, Headers, PseudoHeaders); +%% @todo When we handle trailers properly: +% {ok, _, _} -> +% stream_malformed(State, StreamID, +% 'A required pseudo-header was not found. (RFC7540 8.1.2.3)'); +%% Or: +% {ok, _, _} -> +% stream_reset(State, StreamID, {stream_error, protocol_error, +% 'Malformed response; missing :status in HEADERS frame. (RFC7540 8.1.2.4)'}) + {error, HumanReadable} -> + stream_reset(State, StreamID, {stream_error, protocol_error, HumanReadable}) + end. + +pseudo_headers([{<<":status">>, _}|_], #{status := _}) -> + {error, 'Multiple :status pseudo-headers were found. (RFC7540 8.1.2.3)'}; +pseudo_headers([{<<":status">>, Status}|Tail], PseudoHeaders) -> + try cow_http:status_to_integer(Status) of + IntStatus -> + pseudo_headers(Tail, PseudoHeaders#{status => IntStatus}) + catch _:_ -> + {error, 'The :status pseudo-header value is invalid. (RFC7540 8.1.2.4)'} + end; +pseudo_headers([{<<":", _/bits>>, _}|_], _) -> + {error, 'An unknown or invalid pseudo-header was found. (RFC7540 8.1.2.1)'}; +pseudo_headers(Headers, PseudoHeaders) -> + {ok, PseudoHeaders, Headers}. + +stream_resp_init(State=#http2_state{content_handlers=Handlers0}, + StreamID, IsFin, Headers, PseudoHeaders) -> + case get_stream_by_id(StreamID, State) of + Stream = #stream{ref=StreamRef, reply_to=ReplyTo, remote=nofin} -> + case PseudoHeaders of + #{status := Status} when Status >= 100, Status =< 199 -> + ReplyTo ! {gun_inform, self(), StreamRef, Status, Headers}, + State; + #{status := Status} -> + ReplyTo ! {gun_response, self(), StreamRef, IsFin, Status, Headers}, + Handlers = case IsFin of + fin -> undefined; + nofin -> + gun_content_handler:init(ReplyTo, StreamRef, + Status, Headers, Handlers0) + end, + remote_fin(Stream#stream{handler_state=Handlers}, State, IsFin); + %% @todo For now we assume that it's a trailer if there's no :status. + %% A better state machine is needed to distinguish between that and errors. + _ -> + %% @todo We probably want to pass this to gun_content_handler? + ReplyTo ! {gun_trailers, self(), StreamRef, Headers}, + remote_fin(Stream, State, fin) + end; + _ -> + stream_reset(State, StreamID, {stream_error, stream_closed, + 'HEADERS frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end. + +stream_reset(State=#http2_state{socket=Socket, transport=Transport, + streams=Streams0}, StreamID, StreamError={stream_error, Reason, _}) -> + Transport:send(Socket, cow_http2:rst_stream(StreamID, Reason)), + case lists:keytake(StreamID, #stream.id, Streams0) of + {value, #stream{ref=StreamRef, reply_to=ReplyTo}, Streams} -> + ReplyTo ! {gun_error, self(), StreamRef, StreamError}, + State#http2_state{streams=Streams}; + false -> + %% @todo Unknown stream. Not sure what to do here. Check again once all + %% terminate calls have been written. + State + end. + +error_stream_closed(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream has already been closed."}}, + State. + +error_stream_not_found(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream cannot be found."}}, + State. + +%% Streams. +%% @todo probably change order of args and have state first? + +new_stream(StreamID, StreamRef, ReplyTo, Remote, Local, #http2_state{ + local_settings=#{initial_window_size := RemoteWindow}, + remote_settings=#{initial_window_size := LocalWindow}}) -> + #stream{id=StreamID, ref=StreamRef, reply_to=ReplyTo, + remote=Remote, remote_window=RemoteWindow, + local=Local, local_window=LocalWindow}. + +get_stream_by_id(StreamID, #http2_state{streams=Streams}) -> + lists:keyfind(StreamID, #stream.id, Streams). + +get_stream_by_ref(StreamRef, #http2_state{streams=Streams}) -> + lists:keyfind(StreamRef, #stream.ref, Streams). + +delete_stream(StreamID, State=#http2_state{streams=Streams}) -> + Streams2 = lists:keydelete(StreamID, #stream.id, Streams), + State#http2_state{streams=Streams2}. + +remote_fin(S=#stream{local=fin}, State, fin) -> + delete_stream(S#stream.id, State); +%% We always replace the stream in the state because +%% the content handler state has changed. +remote_fin(S, State=#http2_state{streams=Streams}, IsFin) -> + Streams2 = lists:keyreplace(S#stream.id, #stream.id, Streams, + S#stream{remote=IsFin}), + State#http2_state{streams=Streams2}. + +maybe_delete_stream(State, Stream=#stream{local=fin, remote=fin}) -> + delete_stream(Stream#stream.id, State); +maybe_delete_stream(State=#http2_state{streams=Streams}, Stream) -> + State#http2_state{streams= + lists:keyreplace(Stream#stream.id, #stream.id, Streams, Stream)}. diff --git a/deps/gun/src/gun_sse_h.erl b/deps/gun/src/gun_sse_h.erl new file mode 100644 index 0000000000000000000000000000000000000000..be1c68efd092ffb3b9242067911c08d83a958086 --- /dev/null +++ b/deps/gun/src/gun_sse_h.erl @@ -0,0 +1,55 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_sse_h). +-behavior(gun_content_handler). + +-export([init/5]). +-export([handle/3]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference(), + sse_state :: cow_sse:state() +}). + +%% @todo In the future we want to allow different media types. +%% @todo For text/event-stream specifically, the parameters must be ignored. + +-spec init(pid(), reference(), _, cow_http:headers(), _) + -> {ok, #state{}} | disable. +init(ReplyTo, StreamRef, _, Headers, _) -> + case lists:keyfind(<<"content-type">>, 1, Headers) of + {_, <<"text/event-stream">>} -> + {ok, #state{reply_to=ReplyTo, stream_ref=StreamRef, + sse_state=cow_sse:init()}}; + _ -> + disable + end. + +-spec handle(_, binary(), State) -> {done, State} when State::#state{}. +handle(IsFin, Data, State=#state{reply_to=ReplyTo, stream_ref=StreamRef, sse_state=SSE0}) -> + case cow_sse:parse(Data, SSE0) of + {event, Event, SSE} -> + ReplyTo ! {gun_sse, self(), StreamRef, Event}, + handle(IsFin, <<>>, State#state{sse_state=SSE}); + {more, SSE} -> + _ = case IsFin of + fin -> + ReplyTo ! {gun_sse, self(), StreamRef, fin}; + _ -> + ok + end, + {done, State#state{sse_state=SSE}} + end. diff --git a/deps/gun/src/gun_sup.erl b/deps/gun/src/gun_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..6e724982b6a4ca6cf50ecfe178ab996ccf230bc7 --- /dev/null +++ b/deps/gun/src/gun_sup.erl @@ -0,0 +1,38 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +%% @private +-module(gun_sup). +-behaviour(supervisor). + +%% API. +-export([start_link/0]). + +%% supervisor. +-export([init/1]). + +-define(SUPERVISOR, ?MODULE). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + supervisor:start_link({local, ?SUPERVISOR}, ?MODULE, []). + +%% supervisor. + +init([]) -> + Procs = [{gun, {gun, start_link, []}, + temporary, 5000, worker, [gun]}], + {ok, {{simple_one_for_one, 10, 10}, Procs}}. diff --git a/deps/gun/src/gun_tcp.erl b/deps/gun/src/gun_tcp.erl new file mode 100644 index 0000000000000000000000000000000000000000..0f5addcf62f083659489edccd2478006464c4705 --- /dev/null +++ b/deps/gun/src/gun_tcp.erl @@ -0,0 +1,52 @@ +%% Copyright (c) 2011-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_tcp). + +-export([name/0]). +-export([messages/0]). +-export([connect/4]). +-export([send/2]). +-export([setopts/2]). +-export([sockname/1]). +-export([close/1]). + +name() -> tcp. + +messages() -> {tcp, tcp_closed, tcp_error}. + +-spec connect(inet:ip_address() | inet:hostname(), + inet:port_number(), any(), timeout()) + -> {ok, inet:socket()} | {error, atom()}. +connect(Host, Port, Opts, Timeout) when is_integer(Port) -> + gen_tcp:connect(Host, Port, + Opts ++ [binary, {active, false}, {packet, raw}], + Timeout). + +-spec send(inet:socket(), iodata()) -> ok | {error, atom()}. +send(Socket, Packet) -> + gen_tcp:send(Socket, Packet). + +-spec setopts(inet:socket(), list()) -> ok | {error, atom()}. +setopts(Socket, Opts) -> + inet:setopts(Socket, Opts). + +-spec sockname(inet:socket()) + -> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}. +sockname(Socket) -> + inet:sockname(Socket). + +-spec close(inet:socket()) -> ok. +close(Socket) -> + gen_tcp:close(Socket). diff --git a/deps/gun/src/gun_tls.erl b/deps/gun/src/gun_tls.erl new file mode 100644 index 0000000000000000000000000000000000000000..d377927b2f8e3027bf5ad8f7d4ca54061a439dd7 --- /dev/null +++ b/deps/gun/src/gun_tls.erl @@ -0,0 +1,58 @@ +%% Copyright (c) 2011-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_tls). + +-export([name/0]). +-export([messages/0]). +-export([connect/3]). +-export([connect/4]). +-export([send/2]). +-export([setopts/2]). +-export([sockname/1]). +-export([close/1]). + +name() -> tls. + +messages() -> {ssl, ssl_closed, ssl_error}. + +-spec connect(inet:socket(), any(), timeout()) + -> {ok, ssl:sslsocket()} | {error, atom()}. +connect(Socket, Opts, Timeout) -> + ssl:connect(Socket, Opts, Timeout). + +-spec connect(inet:ip_address() | inet:hostname(), + inet:port_number(), any(), timeout()) + -> {ok, ssl:sslsocket()} | {error, atom()}. +connect(Host, Port, Opts, Timeout) when is_integer(Port) -> + ssl:connect(Host, Port, + Opts ++ [binary, {active, false}, {packet, raw}], + Timeout). + +-spec send(ssl:sslsocket(), iodata()) -> ok | {error, atom()}. +send(Socket, Packet) -> + ssl:send(Socket, Packet). + +-spec setopts(ssl:sslsocket(), list()) -> ok | {error, atom()}. +setopts(Socket, Opts) -> + ssl:setopts(Socket, Opts). + +-spec sockname(ssl:sslsocket()) + -> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}. +sockname(Socket) -> + ssl:sockname(Socket). + +-spec close(ssl:sslsocket()) -> ok. +close(Socket) -> + ssl:close(Socket). diff --git a/deps/gun/src/gun_ws.erl b/deps/gun/src/gun_ws.erl new file mode 100644 index 0000000000000000000000000000000000000000..b89840e6cc1e4b5e6ad117967dc8438f4c13a677 --- /dev/null +++ b/deps/gun/src/gun_ws.erl @@ -0,0 +1,157 @@ +%% Copyright (c) 2015-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_ws). + +-export([check_options/1]). +-export([name/0]). +-export([init/8]). +-export([handle/2]). +-export([close/2]). +-export([send/2]). +-export([down/1]). + +-record(payload, { + type = undefined :: cow_ws:frame_type(), + rsv = undefined :: cow_ws:rsv(), + len = undefined :: non_neg_integer(), + mask_key = undefined :: cow_ws:mask_key(), + close_code = undefined :: undefined | cow_ws:close_code(), + unmasked = <<>> :: binary(), + unmasked_len = 0 :: non_neg_integer() +}). + +-record(ws_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + buffer = <<>> :: binary(), + in = head :: head | #payload{} | close, + frag_state = undefined :: cow_ws:frag_state(), + utf8_state = 0 :: cow_ws:utf8_state(), + extensions = #{} :: cow_ws:extensions(), + handler :: module(), + handler_state :: any() +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([{compress, B}|Opts]) when B =:= true; B =:= false -> + do_check_options(Opts); +do_check_options([{default_protocol, M}|Opts]) when is_atom(M) -> + do_check_options(Opts); +do_check_options([Opt={protocols, L}|Opts]) when is_list(L) -> + case lists:usort(lists:flatten([[is_binary(B), is_atom(M)] || {B, M} <- L])) of + [true] -> do_check_options(Opts); + _ -> {error, {options, {ws, Opt}}} + end; +do_check_options([{user_opts, _}|Opts]) -> + do_check_options(Opts); +do_check_options([Opt|_]) -> + {error, {options, {ws, Opt}}}. + +name() -> ws. + +init(Owner, Socket, Transport, StreamRef, Headers, Extensions, Handler, Opts) -> + Owner ! {gun_upgrade, self(), StreamRef, [<<"websocket">>], Headers}, + HandlerState = Handler:init(Owner, StreamRef, Headers, Opts), + {switch_protocol, ?MODULE, #ws_state{owner=Owner, socket=Socket, transport=Transport, + extensions=Extensions, handler=Handler, handler_state=HandlerState}}. + +%% Do not handle anything if we received a close frame. +handle(_, State=#ws_state{in=close}) -> + State; +%% Shortcut for common case when Data is empty after processing a frame. +handle(<<>>, State=#ws_state{in=head}) -> + State; +handle(Data, State=#ws_state{buffer=Buffer, in=head, frag_state=FragState, extensions=Extensions}) -> + Data2 = << Buffer/binary, Data/binary >>, + case cow_ws:parse_header(Data2, Extensions, FragState) of + {Type, FragState2, Rsv, Len, MaskKey, Rest} -> + handle(Rest, State#ws_state{buffer= <<>>, + in=#payload{type=Type, rsv=Rsv, len=Len, mask_key=MaskKey}, frag_state=FragState2}); + more -> + State#ws_state{buffer=Data2}; + error -> + close({error, badframe}, State) + end; +handle(Data, State=#ws_state{in=In=#payload{type=Type, rsv=Rsv, len=Len, mask_key=MaskKey, close_code=CloseCode, + unmasked=Unmasked, unmasked_len=UnmaskedLen}, frag_state=FragState, utf8_state=Utf8State, extensions=Extensions}) -> + case cow_ws:parse_payload(Data, MaskKey, Utf8State, UnmaskedLen, Type, Len, FragState, Extensions, Rsv) of + {ok, CloseCode2, Payload, Utf8State2, Rest} -> + dispatch(Rest, State#ws_state{in=head, utf8_state=Utf8State2}, Type, << Unmasked/binary, Payload/binary >>, CloseCode2); + {ok, Payload, Utf8State2, Rest} -> + dispatch(Rest, State#ws_state{in=head, utf8_state=Utf8State2}, Type, << Unmasked/binary, Payload/binary >>, CloseCode); + {more, CloseCode2, Payload, Utf8State2} -> + State#ws_state{in=In#payload{close_code=CloseCode2, unmasked= << Unmasked/binary, Payload/binary >>, + len=Len - byte_size(Data), unmasked_len=2 + byte_size(Data)}, utf8_state=Utf8State2}; + {more, Payload, Utf8State2} -> + State#ws_state{in=In#payload{unmasked= << Unmasked/binary, Payload/binary >>, + len=Len - byte_size(Data), unmasked_len=UnmaskedLen + byte_size(Data)}, utf8_state=Utf8State2}; + Error = {error, _Reason} -> + close(Error, State) + end. + +dispatch(Rest, State0=#ws_state{frag_state=FragState, + handler=Handler, handler_state=HandlerState0}, + Type0, Payload0, CloseCode0) -> + case cow_ws:make_frame(Type0, Payload0, CloseCode0, FragState) of + ping -> + State = send(pong, State0), + handle(Rest, State); + {ping, Payload} -> + State = send({pong, Payload}, State0), + handle(Rest, State); + pong -> + handle(Rest, State0); + {pong, _} -> + handle(Rest, State0); + Frame -> + HandlerState = Handler:handle(Frame, HandlerState0), + State = State0#ws_state{handler_state=HandlerState}, + case Frame of + close -> handle(Rest, State#ws_state{in=close}); + {close, _, _} -> handle(Rest, State#ws_state{in=close}); + {fragment, fin, _, _} -> handle(Rest, State#ws_state{frag_state=undefined}); + _ -> handle(Rest, State) + end + end. + +close(Reason, State) -> + case Reason of +%% @todo We need to send a close frame from gun:ws_loop on close. +% Normal when Normal =:= stop; Normal =:= timeout -> +% send({close, 1000, <<>>}, State); + owner_gone -> + send({close, 1001, <<>>}, State); + {error, badframe} -> + send({close, 1002, <<>>}, State); + {error, badencoding} -> + send({close, 1007, <<>>}, State) + end. + +send(Frame, State=#ws_state{socket=Socket, transport=Transport, extensions=Extensions}) -> + Transport:send(Socket, cow_ws:masked_frame(Frame, Extensions)), + case Frame of + close -> close; + {close, _, _} -> close; + _ -> State + end. + +%% Websocket has no concept of streams. +down(_) -> + {[], []}. diff --git a/deps/gun/src/gun_ws_h.erl b/deps/gun/src/gun_ws_h.erl new file mode 100644 index 0000000000000000000000000000000000000000..7c4af92d6970c1500f87cf86559c4ec3a759e235 --- /dev/null +++ b/deps/gun/src/gun_ws_h.erl @@ -0,0 +1,38 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_ws_h). + +-export([init/4]). +-export([handle/2]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference(), + frag_buffer = <<>> :: binary() +}). + +init(ReplyTo, StreamRef, _, _) -> + #state{reply_to=ReplyTo, stream_ref=StreamRef}. + +handle({fragment, nofin, _, Payload}, + State=#state{frag_buffer=SoFar}) -> + State#state{frag_buffer= << SoFar/binary, Payload/binary >>}; +handle({fragment, fin, Type, Payload}, + State=#state{reply_to=ReplyTo, stream_ref=StreamRef, frag_buffer=SoFar}) -> + ReplyTo ! {gun_ws, self(), StreamRef, {Type, << SoFar/binary, Payload/binary >>}}, + State#state{frag_buffer= <<>>}; +handle(Frame, State=#state{reply_to=ReplyTo, stream_ref=StreamRef}) -> + ReplyTo ! {gun_ws, self(), StreamRef, Frame}, + State. diff --git a/deps/jose/Makefile b/deps/jose/Makefile index 5989a58421ebd7cfd4bf2128bbc465722aa72008..0577f19d3718b2466a4cefe7a5f5930cd11e3500 100644 --- a/deps/jose/Makefile +++ b/deps/jose/Makefile @@ -9,7 +9,7 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += base64url -dep_base64url = hex 0.0.1 undefined +dep_base64url = hex 0.0.1 base64url rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/observer_cli/Makefile b/deps/observer_cli/Makefile index f72be5b6885acf34239c67718f6c7d294f7827a7..b621815f1d62727efdeb902875d3f765d6285311 100644 --- a/deps/observer_cli/Makefile +++ b/deps/observer_cli/Makefile @@ -9,7 +9,7 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += recon -dep_recon = hex 2.5.0 undefined +dep_recon = hex 2.5.0 recon rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/prometheus/README.md b/deps/prometheus/README.md index d5aab863596c3e73f97ebbaaa7ba323d4497e32f..722c2f5eba51dde8c7d4a4943a60a06396b9f8a8 100644 --- a/deps/prometheus/README.md +++ b/deps/prometheus/README.md @@ -4,7 +4,7 @@ Copyright (c) 2016,2017 Ilya Khaprov <>. -__Version:__ 4.5.0 +__Version:__ 4.6.0 [![Hex.pm](https://img.shields.io/hexpm/v/prometheus.svg?maxAge=2592000?style=plastic)](https://hex.pm/packages/prometheus) [![Hex.pm](https://img.shields.io/hexpm/dt/prometheus.svg?maxAge=2592000)](https://hex.pm/packages/prometheus) diff --git a/deps/prometheus/mix.exs b/deps/prometheus/mix.exs index 99b98c113427df03a8c3113772142a3c0ce48bab..a8b2268c865662867da4e25bb3c01d4b9cd795fc 100644 --- a/deps/prometheus/mix.exs +++ b/deps/prometheus/mix.exs @@ -3,7 +3,7 @@ defmodule Prometheus.Mixfile do def project do [app: :prometheus, - version: "4.5.0", + version: "4.6.0", description: description(), package: package()] end diff --git a/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl b/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl index dd1fe85c99b3397b9f932c610c3a41602e0e9c73..fd3ee2c67899bfff71244a3b91745ec9347e3a5e 100644 --- a/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl +++ b/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl @@ -142,6 +142,12 @@ %% The state is represented as a numerical value where `pending=1', %% `up_pending=2' and `up=3'. %% +%%
  • +%% `erlang_vm_dist_node_queue_size_bytes'
    +%% Type: gauge.
    +%% The number of bytes in the output distribution queue.
    +%% This queue sits between the Erlang code and the port driver. +%%
  • %% %% %% ==Configuration== @@ -223,6 +229,9 @@ %%
  • %% `node_state' for `erlang_vm_dist_node_state'. %%
  • +%%
  • +%% `node_queue_size_bytes' for `erlang_vm_dist_node_queue_size_bytes'. +%%
  • %% %% %% By default all metrics are enabled. @@ -239,6 +248,8 @@ -behaviour(prometheus_collector). +-dialyzer({nowarn_function, node_queue_size/1}). + %%==================================================================== %% Macros %%==================================================================== @@ -360,7 +371,11 @@ metrics1() -> "The current state of the distribution link. " "The state is represented as a numerical value where `pending=1', " "`up_pending=2' and `up=3'.", - metric_node_state(Data)}]. + metric_node_state(Data)}, + {node_queue_size_bytes, gauge, + "The number of bytes in the output distribution queue. " + "This queue sits between the Erlang code and the port driver.", + metric_node_queue_size(Data)}]. enabled_metrics() -> application:get_env(prometheus, vm_dist_collector_metrics, all). @@ -482,3 +497,17 @@ metric_node_state(Data) -> node_state(pending) -> 1; node_state(up_pending) -> 2; node_state(up) -> 3. + +metric_node_queue_size(Data) -> + [ + {[{peer, Node}], node_queue_size(Node)} + || {Node, _} <- Data]. + +node_queue_size(Node) -> + ConnId = ets:lookup_element(sys_dist, Node, 3), + {ok, _, _, QueueSize} = erlang:dist_get_stat(ConnId), + case QueueSize of + false -> 0; + true -> -1; + _ -> QueueSize + end. diff --git a/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl b/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl index fa37eee044fbb190da22ce25665ca386c44caf2d..a0974746c58e6d5e07f64fe808e8ef9d69d1836a 100644 --- a/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl +++ b/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl @@ -315,7 +315,11 @@ collect_allocator_metrics() -> [ [ allocator_metric(Alloc, Instance, Kind, Key, KindInfo) - || Key <- [blocks, blocks_size, carriers, carriers_size]] + || Key <- [carriers, carriers_size]] ++ + [ + allocator_blocks_metric(Alloc, Instance, Kind, Key, KindInfo) + || Key <- [count, size]] + || {Kind, KindInfo} <- Info, (Kind =:= mbcs) orelse (Kind =:= mbcs_pool) orelse (Kind =:= sbcs)] end || {{Alloc, Instance}, Info} <- allocators()]), prometheus_model_helpers:gauge_metrics(Metrics). @@ -334,3 +338,31 @@ allocators() -> Allocs <- [erlang:system_info({allocator, A})], Allocs =/= false, {_, N, Props} <- Allocs]. + +allocator_blocks_metric(Alloc, Instance, Kind, count, KindInfo) -> + Count = case lists:keyfind(blocks, 1, KindInfo) of + {blocks, L} when is_list(L) -> + sum_alloc_block_list(count, L, 0); + Tuple -> + element(2, Tuple) + end, + {[{alloc, Alloc}, {instance_no, Instance}, {kind, Kind}, {usage, blocks}], Count}; +allocator_blocks_metric(Alloc, Instance, Kind, size, KindInfo) -> + Size = case lists:keyfind(blocks_size, 1, KindInfo) of + false -> + sum_alloc_block_list(size, element(2, lists:keyfind(blocks, 1, KindInfo)), 0); + Tuple -> + element(2, Tuple) + end, + {[{alloc, Alloc}, {instance_no, Instance}, {kind, Kind}, {usage, blocks_size}], Size}. + +sum_alloc_block_list(Type, [{_, L} | Rest], Acc) -> + Value = case lists:keyfind(Type, 1, L) of + false -> 0; + Tuple -> element(2, Tuple) + end, + sum_alloc_block_list(Type, Rest, Value + Acc); +sum_alloc_block_list(Type, [_ | Rest], Acc) -> + sum_alloc_block_list(Type, Rest, Acc); +sum_alloc_block_list(_Type, [], Acc) -> + Acc. diff --git a/deps/prometheus/src/prometheus.app.src b/deps/prometheus/src/prometheus.app.src index 936c798950ce17a498eda79b0fefbbfe2892459b..2897bcde6beb3c0c5c1df519736c93dce0b47d0c 100644 --- a/deps/prometheus/src/prometheus.app.src +++ b/deps/prometheus/src/prometheus.app.src @@ -1,6 +1,6 @@ {application,prometheus, [{description,"Prometheus.io client in Erlang"}, - {vsn,"4.5.0"}, + {vsn,"4.6.0"}, {registered,[]}, {mod,{prometheus,[]}}, {applications,[kernel,stdlib]}, diff --git a/deps/ra/LICENSE-APACHE2 b/deps/ra/LICENSE-APACHE2 index 9f861f82cfb1860b38f2bb4344f1e8e016c370b5..8703a8a3dfc95ee207db080dfaf1715905de3fe7 100644 --- a/deps/ra/LICENSE-APACHE2 +++ b/deps/ra/LICENSE-APACHE2 @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2017-2019 Pivotal Software Inc. + Copyright 2017-2020 VMware Inc or its affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/deps/ra/LICENSE-MPL-RabbitMQ b/deps/ra/LICENSE-MPL-RabbitMQ index c39ede452abbfbf5949a28af365d949fcf11ff3b..255977c96625cd125d8cf03fe67f4e81a8843e4d 100644 --- a/deps/ra/LICENSE-MPL-RabbitMQ +++ b/deps/ra/LICENSE-MPL-RabbitMQ @@ -446,8 +446,8 @@ EXHIBIT A -Mozilla Public License. The Original Code is RabbitMQ. - The Initial Developer of the Original Code is GoPivotal, Inc. - Copyright (c) 2017 Pivotal Software, Inc. All rights reserved.'' + The Initial Developer of the Original Code is Pivotal Software, Inc. + Copyright (c) 2017-2020 VMware, Inc or its affiliates. All rights reserved.'' [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should diff --git a/deps/ra/Makefile b/deps/ra/Makefile index 3ed21306d1d7c35efa7105c1a4d7dd2ec6f21ba7..aeafbe079512e8ffc127150cf141f710da87df80 100644 --- a/deps/ra/Makefile +++ b/deps/ra/Makefile @@ -9,9 +9,9 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += gen_batch_server -dep_gen_batch_server = hex 0.8.2 undefined +dep_gen_batch_server = hex 0.8.2 gen_batch_server DEPS += aten -dep_aten = hex 0.5.3 undefined +dep_aten = hex 0.5.3 aten rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/ra/README.md b/deps/ra/README.md index 5945535ae3a8f0671b42514a95b519553318f15a..ce5fdfb289265f8f894e2867a14a445a639d25d5 100644 --- a/deps/ra/README.md +++ b/deps/ra/README.md @@ -33,32 +33,6 @@ The following Raft features are implemented: Ra requires Erlang/OTP 21.3+. Erlang 22+ is **highly recommended** because of [distribution traffic fragmentation](http://blog.erlang.org/OTP-22-Highlights/). -## Quick start - -```erlang -%% First we have to start the Ra application -ra:start(), - -%% All servers in a Ra cluster are named processes. -%% Create some Server Ids to pass to the configuration -ErlangNodes = [ra@node1, ra@node2, ra@node3], -ServerIds = [{quick_start, N} || N <- ErlangNodes], - -%% start a simple distributed addition state machine with an initial state of 0 -ClusterName = quick_start, -{ok, ServersStarted, ServersNotStarted} = ra:start_cluster(ClusterName, {simple, fun erlang:'+'/2, 0}, ServerIds), - -%% Add a number to the state machine -%% Simple state machines always return the full state after each operation -{ok, StateMachineResult, LeaderId} = ra:process_command(hd(ServersStarted), 5), - -%% use the leader id from the last command result for the next -{ok, 12, LeaderId1} = ra:process_command(LeaderId, 7). -``` - -"Simple" state machines like the above can only take you so far. See [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) -for how to write a state machine by implementing the `ra_machine` behaviour. - ## Design Goals * Low footprint: use as few resources as possible, avoid process tree explosion @@ -75,17 +49,101 @@ which has two major shortcomings: * Replication algorithm is linear * Failure recovery procedure requires expensive topology changes +## Smallest Possible Usage Example + +The example below assumes a few things: + + * You are familiar with the basics of [distributed Erlang](https://learnyousomeerlang.com/distribunomicon) + * Three Erlang nodes are started on the local machine or reachable resolvable hosts. + Their names are `ra1@hostname.local`, `ra2@hostname.local`, and `ra3@hostname.local` in the example below but your actual hostname will be different. + Therefore the naming scheme is `ra{N}@{hostname}`. This is not a Ra requirement so you are + welcome to use different node names and update the code accordingly. + +Erlang nodes can be started using `rebar3 shell --name {node name}`. They will have Ra modules +on code path: + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra1@hostname.local +``` + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra2@hostname.local +``` + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra3@hostname.local +``` + +After Ra nodes form a cluster, state machine commands can be performed. + +Here's what a small example looks like: + +``` erlang +%% The Ra application has to be started before it can be used. +ra:start(), + +%% All servers in a Ra cluster are named processes on Erlang nodes. +%% The Erlang nodes must have distribution enabled and be able to +%% communicate with each other. +%% See https://learnyousomeerlang.com/distribunomicon if you are new to Erlang/OTP. + +%% These Erlang nodes will host Ra nodes. They are the "seed" and assumed to +%% be running or come online shortly after Ra cluster formation is started with ra:start_cluster/3. +ErlangNodes = [ra1@hostname.local, ra2@hostname.local, ra3@hostname.local], + +%% This will check for Erlang distribution connectivity. If Erlang nodes +%% cannot communicate with each other, Ra nodes would not be able to cluster or communicate +%% either. +[io:format("Attempting to communicate with node ~s, response: ~s~n", [N, net_adm:ping(N)]) || N <- ErlangNodes], + +%% Create some Ra server IDs to pass to the configuration. These IDs will be +%% used to address Ra nodes in Ra API functions. +ServerIds = [{quick_start, N} || N <- ErlangNodes], + +ClusterName = quick_start, +%% State machine that implements the logic +Machine = {simple, fun erlang:'+'/2, 0}, + +%% Start a Ra cluster with an addition state machine that has an initial state of 0. +%% It's sufficient to invoke this function only on one Erlang node. For example, this +%% can be a "designated seed" node or the node that was first to start and did not discover +%% any peers after a few retries. +%% +%% Repeated startup attempts will fail even if the cluster is formed, has elected a leader +%% and is fully functional. +{ok, ServersStarted, _ServersNotStarted} = ra:start_cluster(ClusterName, Machine, ServerIds), + +%% Add a number to the state machine. +%% Simple state machines always return the full state after each operation. +{ok, StateMachineResult, LeaderId} = ra:process_command(hd(ServersStarted), 5), + +%% Use the leader id from the last command result for the next one +{ok, 12, LeaderId1} = ra:process_command(LeaderId, 7). +``` + +See [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) +for how to write more sophisiticated state machines by implementing +the `ra_machine` behaviour. + +A [Ra-based key/value store example](https://github.com/rabbitmq/ra-kv-store) is available +in a separate repository. + + ## Documentation -* API docs: https://rabbitmq.github.io/ra/ +* [API reference](https://rabbitmq.github.io/ra/) * How to write a Ra state machine: [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) * Design and implementation details: [Ra internals guide](docs/internals/INTERNALS.md) ### Examples -A number of examples can be found in a [separate repository](https://github.com/rabbitmq/ra-examples). +* [Ra-based key/value store](https://github.com/rabbitmq/ra-kv-store) + -## Configuration +## Configuration Reference * `data_dir`: @@ -162,9 +220,20 @@ of low priority commands that are added to the log each flush cycle. Default: 25 ] ``` +### Logging + +Ra will use default OTP `logger` by default, unless `logger_module` configuration key is used to override. + +To change log level to `debug` for all applications, use + +``` erl +logger:set_primary_config(level, debug). +``` + + ## Copyright and License -(c) 2017-2020, Pivotal Software Inc. +(c) 2017-2020, VMware Inc or its affiliates. Double licensed under the ASL2 and MPL1.1. See [LICENSE](./LICENSE) for details. diff --git a/deps/ra/src/ra.app.src b/deps/ra/src/ra.app.src index c1c451fa7f549783ff1c8222acbb9785facd4c01..9f530a28a28ad57f56fdaa747b504d369aaed164 100644 --- a/deps/ra/src/ra.app.src +++ b/deps/ra/src/ra.app.src @@ -1,6 +1,6 @@ {application,ra, [{description,"Raft library"}, - {vsn,"1.0.8"}, + {vsn,"1.1.2"}, {licenses,["Apache","MPL"]}, {links,[{"github","https://github.com/rabbitmq/ra"}]}, {modules,[]}, diff --git a/deps/ra/src/ra.erl b/deps/ra/src/ra.erl index ce1c91fc368c29ee1d2a8e5a12842b67f7b22b04..b97a9fd4265cb0d539f74fbe046f3bcda42a7caa 100644 --- a/deps/ra/src/ra.erl +++ b/deps/ra/src/ra.erl @@ -121,7 +121,7 @@ start_in(DataDir) -> %% @doc Restarts a previously successfully started ra server %% @param ServerId the ra_server_id() of the server -%% @returns `{ok | error, Error}' when error can be +%% @returns `{ok | error, Error}' where error can be %% `not_found' or `name_not_registered' when the ra server has never before %% been started on the Erlang node. %% @end @@ -155,9 +155,9 @@ stop_server(ServerId) -> %% @doc Deletes a ra server %% The server is forcefully deleted. %% @param ServerId the ra_server_id() of the server -%% @returns `{ok | error, nodedown}' +%% @returns `ok | {error, nodedown} | {badrpc, Reason}' %% @end --spec force_delete_server(ServerId :: ra_server_id()) -> ok | {error, term()}. +-spec force_delete_server(ServerId :: ra_server_id()) -> ok | {error, term()} | {badrpc, term()}. force_delete_server(ServerId) -> ra_server_sup_sup:delete_server(ServerId). @@ -535,7 +535,7 @@ leave_and_terminate(ServerId) -> %% @param ServerId the ra server to remove %% @see leave_and_terminate/3 %% @end --spec leave_and_terminate(ra_server_id(), ra_server_id()) -> +-spec leave_and_terminate(ra_server_id() | [ra_server_id()], ra_server_id()) -> ok | timeout | {error, noproc}. leave_and_terminate(ServerRef, ServerId) -> leave_and_terminate(ServerRef, ServerId, ?DEFAULT_TIMEOUT). @@ -546,7 +546,8 @@ leave_and_terminate(ServerRef, ServerId) -> %% @param Timeout timeout to use %% @see leave_and_terminate/2 %% @end --spec leave_and_terminate(ra_server_id(), ra_server_id(), timeout()) -> +-spec leave_and_terminate(ra_server_id() | [ra_server_id()], + ra_server_id(), timeout()) -> ok | timeout | {error, noproc}. leave_and_terminate(ServerRef, ServerId, Timeout) -> LeaveCmd = {'$ra_leave', ServerId, await_consensus}, @@ -650,7 +651,7 @@ overview() -> %% @end -spec process_command(ServerId :: ra_server_id() | [ra_server_id()], Command :: term(), - Timeout :: non_neg_integer()) -> + Timeout :: timeout()) -> {ok, Reply :: term(), Leader :: ra_server_id()} | {error, term()} | {timeout, ra_server_id()}. @@ -689,7 +690,7 @@ process_command(ServerId, Command) -> %% structure will be returned informing the caller that it cannot process the %% message. The message will include the current cluster leader, if one is known: %% -%% `{ra_event, CurrentLeader, {rejected, {not_leader, Leader, Correlation}}}' +%% `{ra_event, FromId, {rejected, {not_leader, Leader | undefined, Correlation}}}' %% %% The caller must then redirect the command for the correlation identifier to %% the correct ra server: the leader. @@ -780,7 +781,8 @@ local_query(ServerId, QueryFun) -> -spec local_query(ServerId :: ra_server_id(), QueryFun :: query_fun(), Timeout :: timeout()) -> - ra_server_proc:ra_leader_call_ret({ra_idxterm(), term()}). + ra_server_proc:ra_leader_call_ret({ra_idxterm(), term()}) | + {ok, {ra_idxterm(), term()}, not_known}. local_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, local, Timeout). @@ -791,25 +793,27 @@ local_query(ServerId, QueryFun, Timeout) -> %% The leader state may be more up-to-date compared to local state of some followers. %% This function may still return stale results as it reads the current state %% and does not wait for commands to be applied. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @end --spec leader_query(ServerId :: ra_server_id(), +-spec leader_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun()) -> - {ok, {ra_idxterm(), term()}, ra_server_id() | not_known}. + ra_server_proc:ra_leader_call_ret(term()) | + {ok, {ra_idxterm(), term()}, not_known}. leader_query(ServerId, QueryFun) -> leader_query(ServerId, QueryFun, ?DEFAULT_TIMEOUT). %% @doc Same as `leader_query/2' but accepts a custom timeout. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @param Timeout the timeout to use %% @see leader_query/2 %% @end --spec leader_query(ServerId :: ra_server_id(), +-spec leader_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun(), Timeout :: timeout()) -> - {ok, {ra_idxterm(), term()}, ra_server_id() | not_known}. + ra_server_proc:ra_leader_call_ret(term()) | + {ok, {ra_idxterm(), term()}, not_known}. leader_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, leader, Timeout). @@ -819,22 +823,22 @@ leader_query(ServerId, QueryFun, Timeout) -> %% Consistency guarantee is that the query will return result containing %% at least all changes, committed before this query is issued. %% This may include changes which were committed while the query is running. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @end --spec consistent_query(ServerId :: ra_server_id(), +-spec consistent_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun()) -> ra_server_proc:ra_leader_call_ret(term()). consistent_query(ServerId, QueryFun) -> consistent_query(ServerId, QueryFun, ?DEFAULT_TIMEOUT). %% @doc Same as `consistent_query/2' but accepts a custom timeout. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @param Timeout the timeout to use %% @see consistent_query/2 %% @end --spec consistent_query(ServerId :: ra_server_id(), +-spec consistent_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun(), Timeout :: timeout()) -> ra_server_proc:ra_leader_call_ret(term()). @@ -842,28 +846,28 @@ consistent_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, consistent, Timeout). %% @doc Returns a list of cluster members -%% @param ServerId the Ra server to send the query to +%% @param ServerId the Ra server(s) to send the query to %% @end --spec members(ra_server_id()) -> +-spec members(ra_server_id() | [ra_server_id()]) -> ra_server_proc:ra_leader_call_ret([ra_server_id()]). members(ServerId) -> members(ServerId, ?DEFAULT_TIMEOUT). %% @doc Returns a list of cluster members -%% @param ServerId the Ra server to send the query to +%% @param ServerId the Ra server(s) to send the query to %% @param Timeout the timeout to use %% @end --spec members(ra_server_id(), timeout()) -> +-spec members(ra_server_id() | [ra_server_id()], timeout()) -> ra_server_proc:ra_leader_call_ret([ra_server_id()]). members(ServerId, Timeout) -> ra_server_proc:state_query(ServerId, members, Timeout). --spec initial_members(ra_server_id()) -> - ra_server_proc:ra_leader_call_ret([ra_server_id()]). +-spec initial_members(ra_server_id() | [ra_server_id()]) -> + ra_server_proc:ra_leader_call_ret([ra_server_id()] | error). initial_members(ServerId) -> initial_members(ServerId, ?DEFAULT_TIMEOUT). --spec initial_members(ra_server_id(), timeout()) -> +-spec initial_members(ra_server_id() | [ra_server_id()], timeout()) -> ra_server_proc:ra_leader_call_ret([ra_server_id()] | error). initial_members(ServerId, Timeout) -> ra_server_proc:state_query(ServerId, initial_members, Timeout). @@ -872,7 +876,7 @@ initial_members(ServerId, Timeout) -> %% Returns `already_leader' if the transfer targer is already the leader. %% @end -spec transfer_leadership(ra_server_id(), ra_server_id()) -> - ok | already_leader. + ok | already_leader | {error, term()} | {timeout, ra_server_id()}. transfer_leadership(ServerId, TargetServerId) -> ra_server_proc:transfer_leadership(ServerId, TargetServerId, ?DEFAULT_TIMEOUT). diff --git a/deps/ra/src/ra.hrl b/deps/ra/src/ra.hrl index 061b445c4da0c480db439cc2ad05dcd85a9cc036..a40279c5ab87bd04fcdc8aad6fa2a8eebd2dcaa1 100644 --- a/deps/ra/src/ra.hrl +++ b/deps/ra/src/ra.hrl @@ -151,7 +151,14 @@ term :: ra_term()}). %% WAL defaults --define(WAL_MAX_SIZE_BYTES, 512 * 1024 * 1024). +-define(WAL_DEFAULT_MAX_SIZE_BYTES, 256 * 1000 * 1000). +-define(WAL_DEFAULT_MAX_BATCH_SIZE, 8192). +%% define a minimum allowable wal size. If anyone tries to set a really small +%% size that is smaller than the logical block size the pre-allocation code may +%% fail +-define(WAL_MIN_SIZE, 65536). +%% The size of each WAL file chunk that is processed at a time during recovery +-define(WAL_RECOVERY_CHUNK_SIZE, 33554432). %% logging shim -define(DEBUG(Fmt, Args), ?DISPATCH_LOG(debug, Fmt, Args)). diff --git a/deps/ra/src/ra_bench.erl b/deps/ra/src/ra_bench.erl index 5113f58221813e0b6c89d1e868832790047528d2..73307fa21d96d29904d00103d7f4e5583e586df3 100644 --- a/deps/ra/src/ra_bench.erl +++ b/deps/ra/src/ra_bench.erl @@ -73,7 +73,7 @@ run(#{name := Name, Taken = End - Start, io:format("benchmark completed: ~b ops in ~bms rate ~b ops/sec~n", [TotalOps, Taken, TotalOps div (Taken div 1000)]), - ra:delete_cluster(ServerIds), + _ = ra:delete_cluster(ServerIds), print_metrics(atom_to_binary(Name, utf8)), ok. diff --git a/deps/ra/src/ra_lib.erl b/deps/ra/src/ra_lib.erl index 3ed297da352e93cb8d2b544ff36a38fa84e93e80..def88f6345657ec46833dfefb564dc6fa17de2c1 100644 --- a/deps/ra/src/ra_lib.erl +++ b/deps/ra/src/ra_lib.erl @@ -29,9 +29,11 @@ derive_safe_string/2, validate_base64uri/1, partition_parallel/2, + partition_parallel/3, retry/2, retry/3, - write_file/2 + write_file/2, + lists_chunk/2 ]). ceiling(X) when X < 0 -> @@ -247,27 +249,29 @@ derive_safe_string(S, Num) -> string:slice(F(string:next_grapheme(S), []), 0, Num). partition_parallel(F, Es) -> - Parent = self(), - Running = [ - {spawn_monitor(fun() -> Parent ! {self(), F(E)} end), E} - || E <- Es], - collect(Running, {[], []}, 60000). + partition_parallel(F, Es, 60000). -collect([], Acc, _Timeout) -> Acc; +partition_parallel(F, Es, Timeout) -> + Parent = self(), + Running = [{spawn_monitor(fun() -> Parent ! {self(), F(E)} end), E} + || E <- Es], + collect(Running, {[], []}, Timeout). + +collect([], Acc, _Timeout) -> + Acc; collect([{{Pid, MRef}, E} | Next], {Left, Right}, Timeout) -> - receive - {Pid, true} -> - erlang:demonitor(MRef, [flush]), - collect(Next, {[E | Left], Right}, Timeout); - % [{left, E} | collect(Next, Timeout)]; - {Pid, false} -> - erlang:demonitor(MRef, [flush]), - collect(Next, {Left, [E | Right]}, Timeout); - {'DOWN', MRef, process, Pid, _Reason} -> - collect(Next, {Left, [E | Right]}, Timeout) - after Timeout -> - exit(partition_parallel_timeout) - end. + receive + {Pid, true} -> + erlang:demonitor(MRef, [flush]), + collect(Next, {[E | Left], Right}, Timeout); + {Pid, false} -> + erlang:demonitor(MRef, [flush]), + collect(Next, {Left, [E | Right]}, Timeout); + {'DOWN', MRef, process, Pid, _Reason} -> + collect(Next, {Left, [E | Right]}, Timeout) + after Timeout -> + exit(partition_parallel_timeout) + end. retry(Func, Attempts) -> retry(Func, Attempts, 5000). @@ -307,9 +311,38 @@ write_file(Name, IOData) -> Err end. +lists_chunk(0, List) -> + error(invalid_size, [0, List]); +lists_chunk(Size, List) -> + lists_chunk(Size, List, []). + +lists_chunk(_Size, [], Acc) -> + lists:reverse(Acc); +lists_chunk(Size, List, Acc) when length(List) < Size -> + lists:reverse([List | Acc]); +lists_chunk(Size, List, Acc) -> + {L, Rem} = lists_take(Size, List, []), + lists_chunk(Size, Rem, [L | Acc]). + +lists_take(0, List, Acc) -> + {lists:reverse(Acc), List}; +lists_take(_N, [], Acc) -> + {lists:reverse(Acc), []}; +lists_take(N, [H | T], Acc) -> + lists_take(N-1, T, [H | Acc]). + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). +lists_chink_test() -> + ?assertError(invalid_size, lists_chunk(0, [a])), + ?assertMatch([], lists_chunk(2, [])), + ?assertMatch([[a]], lists_chunk(2, [a])), + ?assertMatch([[a, b]], lists_chunk(2, [a, b])), + ?assertMatch([[a, b], [c]], lists_chunk(2, [a, b, c])), + ?assertMatch([[a, b], [c, d]], lists_chunk(2, [a, b, c, d])), + ok. + make_uid_test() -> U1 = make_uid(), U2 = make_uid(), diff --git a/deps/ra/src/ra_log_segment.erl b/deps/ra/src/ra_log_segment.erl index 916cc0392cdc54be31bb85c773d563436b7d90e1..680833fc226e3622d3df62cd7aa99ceb602ffe3e 100644 --- a/deps/ra/src/ra_log_segment.erl +++ b/deps/ra/src/ra_log_segment.erl @@ -10,6 +10,7 @@ term_query/2, close/1, range/1, + flush/1, max_count/1, filename/1, segref/1, @@ -19,12 +20,13 @@ -include("ra.hrl"). --define(VERSION, 1). +-define(VERSION, 2). -define(MAGIC, "RASG"). -define(HEADER_SIZE, 4 + (16 div 8) + (16 div 8)). -define(DEFAULT_INDEX_MAX_COUNT, 4096). --define(DEFAULT_MAX_PENDING, 4096). --define(INDEX_RECORD_SIZE, ((2 * 64 + 3 * 32) div 8)). +-define(DEFAULT_MAX_PENDING, 1024). +-define(INDEX_RECORD_SIZE_V1, ((2 * 64 + 3 * 32) div 8)). +-define(INDEX_RECORD_SIZE_V2, ((3 * 64 + 2 * 32) div 8)). -type index_record_data() :: {Term :: ra_term(), % 64 bit Offset :: non_neg_integer(), % 32 bit @@ -33,24 +35,30 @@ -type ra_segment_index() :: #{ra_index() => index_record_data()}. +-record(cfg, {version :: non_neg_integer(), + max_count = ?DEFAULT_INDEX_MAX_COUNT :: non_neg_integer(), + max_pending = ?DEFAULT_MAX_PENDING :: non_neg_integer(), + filename :: file:filename_all(), + fd :: maybe(file:io_device()), + index_size :: pos_integer(), + mode = append :: read | append}). + -record(state, - {version :: non_neg_integer(), - max_count = ?DEFAULT_INDEX_MAX_COUNT :: non_neg_integer(), - max_pending = ?DEFAULT_MAX_PENDING :: non_neg_integer(), - filename :: file:filename_all(), - fd :: maybe(file:io_device()), - index_size :: pos_integer(), + {cfg :: #cfg{}, index_offset :: pos_integer(), + index_write_offset :: pos_integer(), data_start :: pos_integer(), data_offset :: pos_integer(), - mode = append :: read | append, + data_write_offset :: pos_integer(), index = undefined :: maybe(ra_segment_index()), range :: maybe({ra_index(), ra_index()}), - pending = [] :: [{non_neg_integer(), binary()}], + pending_data = [] :: iodata(), + pending_index = [] :: iodata(), pending_count = 0 :: non_neg_integer() }). -type ra_log_segment_options() :: #{max_count => non_neg_integer(), + max_pending => non_neg_integer(), mode => append | read}. -opaque state() :: #state{}. @@ -79,61 +87,72 @@ open(Filename, Options) -> Err -> Err end. -process_file(true, Mode, Filename, Fd, _Options) -> +process_file(true, Mode, Filename, Fd, Options) -> case read_header(Fd) of - {ok, MaxCount} -> - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + {ok, Version, MaxCount} -> + MaxPending = maps:get(max_pending, Options, ?DEFAULT_MAX_PENDING), + IndexRecordSize = index_record_size(Version), + IndexSize = MaxCount * IndexRecordSize, {NumIndexRecords, DataOffset, Range, Index} = - recover_index(Fd, MaxCount), - IndexOffset = ?HEADER_SIZE + NumIndexRecords * ?INDEX_RECORD_SIZE, - {ok, #state{version = 1, - max_count = MaxCount, - filename = Filename, - fd = Fd, - index_size = IndexSize, - mode = Mode, - data_start = ?HEADER_SIZE + IndexSize, - data_offset = DataOffset, - index_offset = IndexOffset, - range = Range, - % TODO: we don't need an index in memory in append mode - index = Index}}; + recover_index(Fd, Version, MaxCount), + IndexOffset = ?HEADER_SIZE + NumIndexRecords * IndexRecordSize, + {ok, #state{cfg = #cfg{version = Version, + max_count = MaxCount, + max_pending = MaxPending, + filename = Filename, + mode = Mode, + index_size = IndexSize, + fd = Fd}, + data_start = ?HEADER_SIZE + IndexSize, + data_offset = DataOffset, + data_write_offset = DataOffset, + index_offset = IndexOffset, + index_write_offset = IndexOffset, + range = Range, + % TODO: we don't need an index in memory in append mode + index = Index}}; Err -> Err end; process_file(false, Mode, Filename, Fd, Options) -> MaxCount = maps:get(max_count, Options, ?DEFAULT_INDEX_MAX_COUNT), MaxPending = maps:get(max_pending, Options, ?DEFAULT_MAX_PENDING), - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + IndexSize = MaxCount * ?INDEX_RECORD_SIZE_V2, ok = write_header(MaxCount, Fd), - {ok, #state{version = 1, - max_count = MaxCount, - max_pending = MaxPending, - filename = Filename, - fd = Fd, - index_size = IndexSize, + {ok, #state{cfg = #cfg{version = ?VERSION, + max_count = MaxCount, + max_pending = MaxPending, + filename = Filename, + mode = Mode, + index_size = IndexSize, + fd = Fd}, + index_write_offset = ?HEADER_SIZE, index_offset = ?HEADER_SIZE, - mode = Mode, data_start = ?HEADER_SIZE + IndexSize, - data_offset = ?HEADER_SIZE + IndexSize}}. + data_offset = ?HEADER_SIZE + IndexSize, + data_write_offset = ?HEADER_SIZE + IndexSize + }}. -spec append(state(), ra_index(), ra_term(), binary()) -> - {ok, state()} | {error, full}. -append(#state{max_pending = PendingCount, - pending_count = PendingCount, - pending = Pend, - fd = Fd} = State, + {ok, state()} | {error, full | inet:posix()}. +append(#state{cfg = #cfg{max_pending = PendingCount}, + pending_count = PendingCount} = State0, Index, Term, Data) -> - ok = ra_file_handle:pwrite(Fd, Pend), - append(State#state{pending = [], pending_count = 0}, - Index, Term, Data); -append(#state{index_offset = IndexOffset, + case flush(State0) of + {ok, State} -> + append(State, Index, Term, Data); + Err -> + Err + end; +append(#state{cfg = #cfg{version = Version, + mode = append}, + index_offset = IndexOffset, data_start = DataStart, data_offset = DataOffset, range = Range0, - mode = append, pending_count = PendCnt, - pending = Pend0} = State, + pending_index = IdxPend0, + pending_data = DataPend0} = State, Index, Term, Data) -> % check if file is full case IndexOffset < DataStart of @@ -141,35 +160,61 @@ append(#state{index_offset = IndexOffset, Length = erlang:byte_size(Data), % TODO: check length is less than #FFFFFFFF ?? Checksum = erlang:crc32(Data), + OSize = offset_size(Version), IndexData = <>, - Pend = [{DataOffset, Data}, {IndexOffset, IndexData} | Pend0], Range = update_range(Range0, Index), % fsync is done explicitly - {ok, State#state{index_offset = IndexOffset + ?INDEX_RECORD_SIZE, + {ok, State#state{index_offset = IndexOffset + index_record_size(Version), data_offset = DataOffset + Length, range = Range, - pending = Pend, - pending_count = PendCnt + 1}}; + pending_index = [IdxPend0, IndexData], + pending_data = [DataPend0, Data], + pending_count = PendCnt + 1} + }; false -> {error, full} end. -spec sync(state()) -> {ok, state()} | {error, term()}. -sync(#state{fd = Fd, pending = []} = State) -> +sync(#state{cfg = #cfg{fd = Fd}, + pending_index = []} = State) -> case ra_file_handle:sync(Fd) of ok -> {ok, State}; {error, _} = Err -> Err end; -sync(#state{fd = Fd, pending = Pend} = State) -> - case ra_file_handle:pwrite(Fd, Pend) of +sync(State0) -> + case flush(State0) of + {ok, State} -> + sync(State); + Err -> + Err + end. + +-spec flush(state()) -> {ok, state()} | {error, term()}. +flush(#state{cfg = #cfg{fd = Fd}, + pending_data = PendData, + pending_index = PendIndex, + index_offset = IdxOffs, + data_offset = DataOffs, + index_write_offset = IdxWriteOffs, + data_write_offset = DataWriteOffs} = State) -> + case ra_file_handle:pwrite(Fd, DataWriteOffs, PendData) of ok -> - sync(State#state{pending = [], - pending_count = 0}); - {error, _} = Err -> + case ra_file_handle:pwrite(Fd, IdxWriteOffs, PendIndex) of + ok -> + {ok, State#state{pending_data = [], + pending_index = [], + pending_count = 0, + index_write_offset = IdxOffs, + data_write_offset = DataOffs}}; + Err -> + Err + end; + Err -> Err end. @@ -182,17 +227,10 @@ read(State, Idx, Num) -> -spec read_cons(state(), ra_index(), Num :: non_neg_integer(), fun((binary()) -> term()), Acc) -> Acc when Acc :: [{ra_index(), ra_term(), binary()}]. -read_cons(#state{fd = Fd, mode = read, index = Index}, Idx, +read_cons(#state{cfg = #cfg{fd = _Fd, mode = read}, + index = Index} = State, Idx, Num, Fun, Acc) -> - pread_cons(Fd, Idx + Num - 1, Idx, Index, - fun (Crc, Data) -> - case erlang:crc32(Data) of - Crc -> - Fun(Data); - _ -> - exit(ra_log_segment_crc_check_failure) - end - end, Acc). + pread_cons(State, Idx + Num - 1, Idx, Index, Fun, Acc). -spec term_query(state(), Idx :: ra_index()) -> maybe(ra_term()). term_query(#state{index = Index}, Idx) -> @@ -205,14 +243,32 @@ term_query(#state{index = Index}, Idx) -> pread_cons(_Fd, Idx, FinalIdx, _, _Fun, Acc) when Idx < FinalIdx -> Acc; -pread_cons(Fd, Idx, FinalIdx, Index, Fun, Acc) -> +pread_cons(#state{cfg = #cfg{fd = Fd}} = State, Idx, + FinalIdx, Index, Fun, Acc) -> case Index of - #{Idx := {Term, Offset, Length, Crc}} -> + #{Idx := {Term, Offset, Length, Crc} = IdxRec} -> {ok, Data} = ra_file_handle:pread(Fd, Offset, Length), - pread_cons(Fd, Idx-1, FinalIdx, Index, Fun, - [{Idx, Term, Fun(Crc, Data)} | Acc]); + %% assert data size is same as length + case byte_size(Data) of + Length -> + %% we read the correct length + %% performc crc check + case erlang:crc32(Data) of + Crc -> + pread_cons(State, Idx-1, FinalIdx, Index, Fun, + [{Idx, Term, Fun(Data)} | Acc]); + _ -> + %% CRC check failures are irrecoverable + exit({ra_log_segment_crc_check_failure, Idx, IdxRec, + State#state.cfg#cfg.filename}) + end; + _ReadSize -> + %% we did not read the correct number of bytes suggesting + exit({ra_log_segment_unexpected_eof, Idx, IdxRec, + State#state.cfg#cfg.filename}) + end; _ -> - pread_cons(Fd, Idx-1, FinalIdx, Index, Fun, Acc) + pread_cons(State, Idx-1, FinalIdx, Index, Fun, Acc) end. -spec range(state()) -> maybe({ra_index(), ra_index()}). @@ -220,31 +276,32 @@ range(#state{range = Range}) -> Range. -spec max_count(state()) -> non_neg_integer(). -max_count(#state{max_count = Max}) -> +max_count(#state{cfg = #cfg{max_count = Max}}) -> Max. -spec filename(state()) -> file:filename(). -filename(#state{filename = Fn}) -> +filename(#state{cfg = #cfg{filename = Fn}}) -> filename:absname(Fn). -spec segref(state()) -> maybe(ra_log:segment_ref()). segref(#state{range = undefined}) -> undefined; -segref(#state{range = {Start, End}, filename = Fn}) -> +segref(#state{range = {Start, End}, + cfg = #cfg{filename = Fn}}) -> {Start, End, ra_lib:to_string(filename:basename(Fn))}. -spec is_same_as(state(), file:filename_all()) -> boolean(). -is_same_as(#state{filename = Fn0}, Fn) -> +is_same_as(#state{cfg = #cfg{filename = Fn0}}, Fn) -> is_same_filename_all(Fn0, Fn). -spec close(state()) -> ok. -close(#state{fd = Fd, mode = append} = State) -> +close(#state{cfg = #cfg{fd = Fd, mode = append}} = State) -> % close needs to be defensive and idempotent so we ignore the return % values here _ = sync(State), _ = ra_file_handle:close(Fd), ok; -close(#state{fd = Fd}) -> +close(#state{cfg = #cfg{fd = Fd}}) -> _ = ra_file_handle:close(Fd), ok. @@ -262,13 +319,13 @@ update_range(undefined, Idx) -> update_range({First, _Last}, Idx) -> {min(First, Idx), Idx}. -recover_index(Fd, MaxCount) -> - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, +recover_index(Fd, Version, MaxCount) -> + IndexSize = MaxCount * index_record_size(Version), {ok, ?HEADER_SIZE} = ra_file_handle:position(Fd, ?HEADER_SIZE), DataOffset = ?HEADER_SIZE + IndexSize, case ra_file_handle:read(Fd, IndexSize) of {ok, Data} -> - parse_index_data(Data, DataOffset); + parse_index_data(Version, Data, DataOffset); eof -> % if no entries have been written the file hasn't "stretched" % to where the data offset starts. @@ -278,17 +335,17 @@ recover_index(Fd, MaxCount) -> dump_index(File) -> {ok, Fd} = file:open(File, [read, raw, binary ]), - {ok, MaxCount} = read_header(Fd), - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + {ok, Version, MaxCount} = read_header(Fd), + IndexSize = MaxCount * index_record_size(Version), {ok, ?HEADER_SIZE} = file:position(Fd, ?HEADER_SIZE), DataOffset = ?HEADER_SIZE + IndexSize, case file:read(Fd, IndexSize) of {ok, Data} -> D = [begin - {ok, _} = file:position(Fd, O), - {ok, B} = file:read(Fd, N), - {I, T, binary_to_term(B)} - end || {I, T, O, N} <- dump_index_data(Data, [])], + % {ok, _} = file:position(Fd, O), + % {ok, B} = file:read(Fd, N), + {I, T, O} + end || {I, T, O, _N} <- dump_index_data(Data, [])], _ = file:close(Fd), D; eof -> @@ -299,27 +356,29 @@ dump_index(File) -> end. dump_index_data(<>, Acc) -> dump_index_data(Rest, [{Idx, Term, Offset, Length} | Acc]); dump_index_data(_, Acc) -> lists:reverse(Acc). -parse_index_data(Data, DataOffset) -> - parse_index_data(Data, 0, 0, DataOffset, undefined, #{}). +parse_index_data(2, Data, DataOffset) -> + parse_index_data(Data, 0, 0, DataOffset, undefined, #{}); +parse_index_data(1, Data, DataOffset) -> + parse_index_data_v1(Data, 0, 0, DataOffset, undefined, #{}). parse_index_data(<<>>, Num, _LastIdx, DataOffset, Range, Index) -> % end of data {Num, DataOffset, Range, Index}; -parse_index_data(<<0:64/unsigned, 0:64/unsigned, 0:32/unsigned, +parse_index_data(<<0:64/unsigned, 0:64/unsigned, 0:64/unsigned, 0:32/unsigned, 0:32/integer, _Rest/binary>>, Num, _LastIdx, DataOffset, Range, Index) -> % partially written index % end of written data {Num, DataOffset, Range, Index}; parse_index_data(<>, Num, LastIdx, _DataOffset, Range, Index0) -> % trim index entries if Idx goes "backwards" @@ -329,12 +388,36 @@ parse_index_data(< Index0 end, - parse_index_data(Rest, Num+1, Idx, Offset + Length, update_range(Range, Idx), Index#{Idx => {Term, Offset, Length, Crc}}). +parse_index_data_v1(<<>>, Num, _LastIdx, DataOffset, Range, Index) -> + % end of data + {Num, DataOffset, Range, Index}; +parse_index_data_v1(<<0:64/unsigned, 0:64/unsigned, 0:32/unsigned, + 0:32/unsigned, 0:32/integer, _Rest/binary>>, + Num, _LastIdx, DataOffset, Range, Index) -> + % partially written index + % end of written data + {Num, DataOffset, Range, Index}; +parse_index_data_v1(<>, + Num, LastIdx, _DataOffset, Range, Index0) -> + % trim index entries if Idx goes "backwards" + Index = case Idx < LastIdx of + true -> maps:filter(fun (K, _) when K > Idx -> false; + (_, _) -> true + end, Index0); + false -> Index0 + end, + parse_index_data_v1(Rest, Num+1, Idx, + Offset + Length, + update_range(Range, Idx), + Index#{Idx => {Term, Offset, Length, Crc}}). + write_header(MaxCount, Fd) -> Header = <>, {ok, 0} = ra_file_handle:position(Fd, 0), @@ -346,8 +429,9 @@ read_header(Fd) -> case ra_file_handle:read(Fd, ?HEADER_SIZE) of {ok, Buffer} -> case Buffer of - <> -> - {ok, MaxCount}; + <> + when Version =< ?VERSION -> + {ok, Version, MaxCount}; _ -> {error, invalid_segment_format} end; @@ -356,3 +440,11 @@ read_header(Fd) -> {error, _} = Err -> Err end. + +offset_size(2) -> 64; +offset_size(1) -> 32. + +index_record_size(2) -> + ?INDEX_RECORD_SIZE_V2; +index_record_size(1) -> + ?INDEX_RECORD_SIZE_V1. diff --git a/deps/ra/src/ra_log_segment_writer.erl b/deps/ra/src/ra_log_segment_writer.erl index c77131780658d1d280bda5b9bbfc3085a1f54a9d..0d11086811460cc5763646a38c81ca496645ea0e 100644 --- a/deps/ra/src/ra_log_segment_writer.erl +++ b/deps/ra/src/ra_log_segment_writer.erl @@ -119,8 +119,25 @@ segments_for(UId, #state{data_dir = DataDir}) -> SegFiles = lists:sort(filelib:wildcard(filename:join(Dir, "*.segment"))), SegFiles. -handle_cast({mem_tables, Tables, WalFile}, State0) -> - State = lists:foldl(fun do_segment/2, State0, Tables), +handle_cast({mem_tables, Tables, WalFile}, State) -> + + Degree = erlang:system_info(schedulers), + _ = [begin + {_, Failures} = ra_lib:partition_parallel( + fun (E) -> + ok = do_segment(E, State), + true + end, Tabs, infinity), + case Failures of + [] -> + %% this is what we expect + ok; + _ -> + ?ERROR("segment_writer: ~b failures encounted during segment" + " flush. Errors: ~P", [length(Failures), Failures, 32]), + exit(segment_writer_segment_write_failure) + end + end || Tabs <- ra_lib:lists_chunk(Degree, Tables)], % delete wal file once done % TODO: test scenario when server crashes after segments but before % deleting walfile @@ -196,7 +213,7 @@ get_overview(#state{data_dir = Dir, do_segment({ServerUId, StartIdx0, EndIdx, Tid}, #state{data_dir = DataDir, - segment_conf = SegConf} = State) -> + segment_conf = SegConf}) -> Dir = filename:join(DataDir, binary_to_list(ServerUId)), case open_file(Dir, SegConf) of @@ -206,7 +223,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, %% clean up the tables for this process _ = ets:delete(Tid), _ = clean_closed_mem_tables(ServerUId, Tid), - State; + ok; Segment0 -> case append_to_segment(ServerUId, Tid, StartIdx0, EndIdx, Segment0, SegConf) of @@ -214,7 +231,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, ?WARN("segment_writer: skipping segments for ~w as directory ~s disappeared whilst writing~n", [ServerUId, Dir]), - State; + ok; {Segment1, Closed0} -> % fsync {ok, Segment} = ra_log_segment:sync(Segment1), @@ -222,8 +239,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, % notify writerid of new segment update % includes the full range of the segment % filter out any undefined segrefs - ClosedSegRefs = [ra_log_segment:segref(S) - || S <- Closed0, + ClosedSegRefs = [ra_log_segment:segref(S) || S <- Closed0, %% ensure we don't send undefined seg refs is_tuple(ra_log_segment:segref(S))], SegRefs = case ra_log_segment:segref(Segment) of @@ -236,7 +252,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, _ = ra_log_segment:close(Segment), ok = send_segments(ServerUId, Tid, SegRefs), - State + ok end end. @@ -304,7 +320,10 @@ append_to_segment(UId, Tid, Idx, EndIdx, Seg0, Closed, SegConf) -> % recurse append_to_segment(UId, Tid, StartIdx, EndIdx, Seg, [Seg0 | Closed], SegConf) - end + end; + {error, Posix} -> + FileName = ra_log_segment:filename(Seg0), + exit({segment_writer_append_error, FileName, Posix}) end. find_segment_files(Dir) -> diff --git a/deps/ra/src/ra_log_wal.erl b/deps/ra/src/ra_log_wal.erl index 3593b4784b0f48db4bff30059c8650738a88b339..a921ab14dfca78c16bbdcdaf4dbe28346ef4222d 100644 --- a/deps/ra/src/ra_log_wal.erl +++ b/deps/ra/src/ra_log_wal.erl @@ -20,15 +20,9 @@ -include("ra.hrl"). --define(MAX_SIZE_BYTES, 512 * 1000 * 1000). --define(METRICS_WINDOW_SIZE, 100). -define(CURRENT_VERSION, 1). -define(MAGIC, "RAWA"). -define(HEADER_SIZE, 5). -%% define a minimum allowable wal size. If anyone tries to set a really small -%% size that is smaller than the logical block size the pre-allocation code may -%% fail --define(MIN_WAL_SIZE, 65536). % a writer_id consists of a unqique local name (see ra_directory) and a writer's % current pid(). @@ -66,7 +60,8 @@ dir :: string(), segment_writer = ra_log_segment_writer :: atom(), compute_checksums = false :: boolean(), - max_size_bytes = ?MAX_SIZE_BYTES :: non_neg_integer(), + max_size_bytes :: non_neg_integer(), + recovery_chunk_size = ?WAL_RECOVERY_CHUNK_SIZE :: non_neg_integer(), write_strategy = default :: wal_write_strategy(), sync_method = datasync :: sync | datasync, counter :: counters:counters_ref() @@ -75,7 +70,7 @@ -record(wal, {fd :: maybe(file:io_device()), filename :: maybe(file:filename()), writer_name_cache = {0, #{}} :: writer_name_cache(), - max_size = ?MAX_SIZE_BYTES :: non_neg_integer() + max_size :: non_neg_integer() }). -record(state, {conf = #conf{}, @@ -94,7 +89,6 @@ % and the last index seen writers = #{} :: #{ra_uid() => {in_seq | out_of_seq, ra_index()}}, - metrics_cursor = 0 :: non_neg_integer(), batch :: maybe(#batch{}) }). @@ -104,7 +98,8 @@ segment_writer => atom() | pid(), compute_checksums => boolean(), write_strategy => wal_write_strategy(), - sync_method => sync | datasync}. + sync_method => sync | datasync, + recovery_chunk_size => non_neg_integer()}. -export_type([wal_conf/0, wal_write_strategy/0]). @@ -187,18 +182,17 @@ start_link(Config, Options0) when is_list(Options0) -> -spec init(wal_conf()) -> {ok, state()}. init(#{dir := Dir} = Conf0) -> #{max_size_bytes := MaxWalSize, + recovery_chunk_size := RecoveryChunkSize, segment_writer := SegWriter, compute_checksums := ComputeChecksums, write_strategy := WriteStrategy, sync_method := SyncMethod} = merge_conf_defaults(Conf0), process_flag(trap_exit, true), - % TODO: test that off_heap is actuall beneficial % given ra_log_wal is effectively a fan-in sink it is likely that it will % at times receive large number of messages from a large number of % writers process_flag(message_queue_data, off_heap), CRef = ra_counters:new(?MODULE, 3), - % seed metrics table with data % wait for the segment writer to process anything in flight ok = ra_log_segment_writer:await(SegWriter), %% TODO: recover wal should return {stop, Reason} if it fails @@ -208,7 +202,8 @@ init(#{dir := Dir} = Conf0) -> dir = Dir, segment_writer = SegWriter, compute_checksums = ComputeChecksums, - max_size_bytes = max(?MIN_WAL_SIZE, MaxWalSize), + max_size_bytes = max(?WAL_MIN_SIZE, MaxWalSize), + recovery_chunk_size = RecoveryChunkSize, write_strategy = WriteStrategy, sync_method = SyncMethod, counter = CRef}, @@ -243,7 +238,8 @@ format_status(#state{conf = #conf{write_strategy = Strat, handle_op({cast, WalCmd}, State) -> handle_msg(WalCmd, State). -recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> +recover_wal(Dir, #conf{segment_writer = TblWriter, + recovery_chunk_size = RecoveryChunkSize} = Conf) -> % ensure configured directory exists ok = ra_lib:make_dir(Dir), % recover each mem table and notify segment writer @@ -252,7 +248,6 @@ recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> % As we have waited for the segment writer to finish processing it is % assumed that any remaining wal files need to be re-processed. WalFiles = lists:sort(filelib:wildcard(filename:join(Dir, "*.wal"))), - ?INFO("WAL: recovering ~p", [WalFiles]), % First we recover all the tables using a temporary lookup table. % Then we update the actual lookup tables atomically. _ = ets:new(ra_log_recover_mem_tables, @@ -263,8 +258,14 @@ recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> % read partially recovered % tables mixed with old tables All = [begin - Data = open_existing(F), - ok = try_recover_records(Data, #{}), + FBase = filename:basename(F), + ?DEBUG("wal: recovering ~s", [FBase]), + Fd = open_at_first_record(F), + {Time, ok} = timer:tc(fun () -> + recover_wal_chunks(Fd, RecoveryChunkSize) + end), + ?DEBUG("wal: recovering ~s took ~bms", [FBase, Time div 1000]), + close_existing(Fd), recovering_to_closed(F) end || F <- WalFiles], % get all the recovered tables and insert them into closed @@ -369,7 +370,7 @@ handle_msg({append, {UId, Pid} = Id, Idx, Term, Entry}, {ok, {in_seq, PrevIdx}} -> % writer was in seq but has sent an out of seq entry % notify writer - ?DEBUG("WAL: requesting resend from `~p`, " + ?DEBUG("WAL: requesting resend from `~w`, " "last idx ~b idx received ~b", [UId, PrevIdx, Idx]), Pid ! {ra_log_event, {resend_write, PrevIdx + 1}}, @@ -399,8 +400,6 @@ incr_batch(OpnMemTbl, #batch{writes = Writes, tid = _Tid, from = From, inserts = Inserts0} = W} -> - % ct:pal("insertingf ~w ~w", [Tid, Idx]), - % true = ets:insert(Tid, {Idx, Term, Entry}), TblStart = case Truncate of true -> Idx; @@ -435,8 +434,6 @@ incr_batch(OpnMemTbl, #batch{writes = Writes, {UId, Idx, Idx, T}), {T, Idx} end, - % ct:pal("inserting ~w ~w", [Tid, Idx]), - % true = ets:insert(Tid, {Idx, Term, Entry}), Writer = #batch_writer{tbl_start = TblStart, from = Idx, to = Idx, @@ -525,7 +522,7 @@ open_wal(File, Max, #conf{write_strategy = o_sync, max_size = Max, filename = File}}; {error, enotsup} -> - ?WARN("WAL: o_sync write strategy not supported. " + ?WARN("wal: o_sync write strategy not supported. " "Reverting back to default strategy.", []), open_wal(File, Max, Conf#conf{write_strategy = default}) end; @@ -632,6 +629,7 @@ flush_pending(#state{wal = #wal{fd = Fd}, batch = #batch{pending = Pend} = Batch, conf = #conf{write_strategy = WriteStrategy, sync_method = SyncMeth}} = State0) -> + case WriteStrategy of default -> ok = ra_file_handle:write(Fd, Pend), @@ -646,16 +644,13 @@ complete_batch(#state{batch = undefined} = State) -> State; complete_batch(#state{batch = #batch{waiting = Waiting, writes = NumWrites}, - metrics_cursor = Cursor, conf = Cfg } = State00) -> % TS = os:system_time(microsecond), State0 = flush_pending(State00), % SyncTS = os:system_time(microsecond), counters:add(Cfg#conf.counter, 1, NumWrites), - NextCursor = (Cursor + 1) rem ?METRICS_WINDOW_SIZE, - State = State0#state{metrics_cursor = NextCursor, - batch = undefined}, + State = State0#state{batch = undefined}, %% process writers _ = maps:map(fun (Pid, #batch_writer{tbl_start = TblStart, @@ -665,7 +660,7 @@ complete_batch(#state{batch = #batch{waiting = Waiting, term = Term, inserts = Inserts, tid = Tid}) -> - true = ets:insert(Tid, Inserts), + true = ets:insert(Tid, lists:reverse(Inserts)), true = ets:update_element(ra_log_open_mem_tables, UId, [{2, TblStart}, {3, To}]), Pid ! {ra_log_event, {written, {From, To, Term}}}, @@ -686,6 +681,23 @@ open_existing(File) -> exit({unknown_wal_file_format, Magic, UnknownVersion}) end. +open_at_first_record(File) -> + {ok, Fd} = file:open(File, [read, binary, raw]), + case file:read(Fd, 5) of + {ok, <>} -> + %% the only version currently supported + Fd; + {ok, <>} -> + exit({unknown_wal_file_format, Magic, UnknownVersion}) + end. + +close_existing(Fd) -> + case file:close(Fd) of + ok -> + ok; + {error, Reason} -> + exit({could_not_close, Reason}) + end. dump_records(<<_:1/unsigned, 0:1/unsigned, _:22/unsigned, IdDataLen:16/unsigned, _:IdDataLen/binary, @@ -714,41 +726,63 @@ dump_records(<<_:1/unsigned, 1:1/unsigned, _:22/unsigned, dump_records(<<>>, Entries) -> Entries. -try_recover_records(Data, Cache) -> - try recover_records(Data, Cache) of - ok -> ok - catch _:_ = Err -> - ?WARN("wal: encountered error during recovery: ~w~n" - "Continuing.~n", [Err]), - ok - end. - -recover_records(< + Chunk = read_from_wal_file(Fd, RecoveryChunkSize), + recover_records(Fd, Chunk, #{}, RecoveryChunkSize). +% All zeros indicates end of a pre-allocated wal file +recover_records(_Fd, <<0:1/unsigned, 0:1/unsigned, 0:22/unsigned, + IdDataLen:16/unsigned, _:IdDataLen/binary, + 0:32/integer, 0:32/unsigned, _/binary>>, + _Cache, _ChunkSize) -> + ok; +% First record or different UID to last record +recover_records(Fd, + <>, Cache) -> - % first writer appearance in WAL + Rest/binary>>, + Cache, RecoveryChunkSize) -> true = validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc), - % TODO: recover writers info, i.e. last index seen - recover_records(Rest, - Cache#{IdRef => - {UId, <<1:1/unsigned, IdRef:22/unsigned>>}}); -recover_records(< {UId, <<1:1/unsigned, IdRef:22/unsigned>>}}, + recover_records(Fd, Rest, Cache0, RecoveryChunkSize); +% Same UID as last record +recover_records(Fd, + <>, Cache) -> + Rest/binary>>, + Cache, RecoveryChunkSize) -> #{IdRef := {UId, _}} = Cache, true = validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc), + recover_records(Fd, Rest, Cache, RecoveryChunkSize); +% Not enough remainder to parse another record, need to read +recover_records(Fd, Chunk, Cache, RecoveryChunkSize) -> + NextChunk = read_from_wal_file(Fd, RecoveryChunkSize), + case NextChunk of + <<>> -> + %% we have reached the end of the file + ok; + _ -> + %% append this chunk to the remainder of the last chunk + Chunk0 = <>, + recover_records(Fd, Chunk0, Cache, RecoveryChunkSize) + end. - % TODO: recover writers info, i.e. last index seen - recover_records(Rest, Cache); -recover_records(<<>>, _Cache) -> - ok. +read_from_wal_file(Fd, Len) -> + case file:read(Fd, Len) of + {ok, <>} -> + Data; + eof -> + <<>>; + {error, Reason} -> + exit({could_not_read_wal_chunk, Reason}) + end. validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc) -> validate_checksum(Checksum, Idx, Term, EntryData), @@ -770,7 +804,8 @@ validate_checksum(Checksum, Idx, Term, Data) -> merge_conf_defaults(Conf) -> maps:merge(#{segment_writer => ra_log_segment_writer, - max_size_bytes => ?WAL_MAX_SIZE_BYTES, + max_size_bytes => ?WAL_DEFAULT_MAX_SIZE_BYTES, + recovery_chunk_size => ?WAL_RECOVERY_CHUNK_SIZE, compute_checksums => true, write_strategy => default, sync_method => datasync}, Conf). diff --git a/deps/ra/src/ra_log_wal_sup.erl b/deps/ra/src/ra_log_wal_sup.erl index 89f32ed045dbc5de4578744b6248d331ef209a5c..95a661a2d37a58746045a8a911edd0a9352d054e 100644 --- a/deps/ra/src/ra_log_wal_sup.erl +++ b/deps/ra/src/ra_log_wal_sup.erl @@ -19,9 +19,10 @@ start_link(Conf) -> init([WalConf0]) -> SupFlags = #{strategy => one_for_one, intensity => 1, period => 5}, MaxSizeBytes = application:get_env(ra, wal_max_size_bytes, - ?WAL_MAX_SIZE_BYTES), + ?WAL_DEFAULT_MAX_SIZE_BYTES), ComputeChecksums = application:get_env(ra, wal_compute_checksums, true), - WalMaxBatchSize = application:get_env(ra, wal_max_batch_size, 32768), + WalMaxBatchSize = application:get_env(ra, wal_max_batch_size, + ?WAL_DEFAULT_MAX_BATCH_SIZE), Strategy = application:get_env(ra, wal_write_strategy, default), SyncMethod = application:get_env(ra, wal_sync_method, datasync), WalConf = maps:merge(#{compute_checksums => ComputeChecksums, diff --git a/deps/ra/src/ra_monitors.erl b/deps/ra/src/ra_monitors.erl index 36ed66ba91d01e3e62d299e660560b7f2125f2fd..0bd091cd59fc7f7ed4eb43b6f8e7bc35e3508e89 100644 --- a/deps/ra/src/ra_monitors.erl +++ b/deps/ra/src/ra_monitors.erl @@ -1,5 +1,6 @@ -module(ra_monitors). +-include("ra.hrl"). -export([ init/0, add/3, @@ -103,7 +104,11 @@ handle_down(Target, Monitors0) {maps:keys(CompsMap), Monitors0}; error -> {[], Monitors0} - end. + end; +handle_down(Target, Monitors0) -> + ?DEBUG("ra_monitors: target ~w not recognised", [Target]), + {[], Monitors0}. + -spec components(pid() | node(), state()) -> [component()]. components(Target, Monitors) -> diff --git a/deps/ra/src/ra_server.erl b/deps/ra/src/ra_server.erl index b19405b516984f5deeb75efaa442612d0ae8ccd8..6cd27d41637df6ccccb545233593fb97ac7a902e 100644 --- a/deps/ra/src/ra_server.erl +++ b/deps/ra/src/ra_server.erl @@ -1,6 +1,7 @@ -module(ra_server). -include("ra.hrl"). +-include("ra_server.hrl"). -compile(inline_list_funcs). @@ -25,8 +26,10 @@ % properties id/1, uid/1, + log_id/1, leader_id/1, current_term/1, + machine_query/2, % TODO: hide behind a handle_leader make_rpcs/1, update_release_cursor/3, @@ -45,7 +48,7 @@ fun((ra_msg(), ra_server_state()) -> {boolean(), ra_server_state()}). -type ra_server_state() :: - #{id := {ra_server_id(), ra_uid(), unicode:chardata()}, + #{cfg := #cfg{}, leader_id => maybe(ra_server_id()), cluster := ra_cluster(), cluster_change_permitted := boolean(), @@ -59,13 +62,7 @@ last_applied := ra_index(), persisted_last_applied => ra_index(), stop_after => ra_index(), - machine := ra_machine:machine(), machine_state := term(), - machine_version := ra_machine:version(), - machine_versions := [{ra_index(), ra_machine:version()}, ...], - metrics_key := term(), - effective_machine_version := ra_machine:version(), - effective_machine_module := module(), aux_state => term(), condition => ra_await_condition_fun(), condition_timeout_changes => #{transition_to := ra_state(), @@ -175,7 +172,7 @@ % and persisting last_applied index tick_timeout => non_neg_integer(), % ms await_condition_timeout => non_neg_integer(), - low_priority_commands_flush_size => non_neg_integer(), + max_pipeline_count => non_neg_integer(), ra_event_formatter => {module(), atom(), [term()]}}. -type config() :: ra_server_config(). @@ -196,13 +193,6 @@ effects/0 ]). --define(AER_CHUNK_SIZE, 25). --define(FOLD_LOG_BATCH_SIZE, 25). -% TODO: test what is a good default here -% TODO: make configurable --define(MAX_PIPELINE_DISTANCE, 10000). --define(MAX_FETCH_ENTRIES, 4096). - -spec name(ClusterName :: ra_cluster_name(), UniqueSuffix::string()) -> atom(). name(ClusterName, UniqueSuffix) -> list_to_atom("ra_" ++ ClusterName ++ "_server_" ++ UniqueSuffix). @@ -216,6 +206,8 @@ init(#{id := Id, machine := MachineConf} = Config) -> LogId = maps:get(friendly_name, Config, lists:flatten(io_lib:format("~w", [Id]))), + MaxPipelineCount = maps:get(max_pipeline_count, Config, + ?DEFAULT_MAX_PIPELINE_COUNT), MetricKey = case Config of #{metrics_key := K} -> K; @@ -261,8 +253,19 @@ init(#{id := Id, MacMod = ra_machine:which_module(Machine, MacVer), CommitIndex = max(LastApplied, FirstIndex), - - #{id => {Id, UId, LogId}, + Cfg = #cfg{id = Id, + uid = UId, + log_id = LogId, + metrics_key = MetricKey, + machine = Machine, + machine_version = LatestMacVer, + machine_versions = [{SnapshotIdx, MacVer}], + effective_machine_version = MacVer, + effective_machine_module = MacMod, + max_pipeline_count = MaxPipelineCount}, + + #{cfg => Cfg, + current_term => CurrentTerm, cluster => Cluster0, % There may be scenarios when a single server % starts up but hasn't @@ -270,29 +273,22 @@ init(#{id := Id, % commands that can't be applied. cluster_change_permitted => false, cluster_index_term => SnapshotIndexTerm, - current_term => CurrentTerm, voted_for => VotedFor, commit_index => CommitIndex, last_applied => FirstIndex, persisted_last_applied => LastApplied, log => Log0, - machine => Machine, machine_state => MacState, - machine_version => LatestMacVer, - machine_versions => [{SnapshotIdx, MacVer}], - metrics_key => MetricKey, - effective_machine_version => MacVer, - effective_machine_module => MacMod, %% aux state is transient and needs to be initialized every time aux_state => ra_machine:init_aux(MacMod, Name), query_index => 0, queries_waiting_heartbeats => queue:new(), pending_consistent_queries => []}. -recover(#{id := {_, _, LogId}, +recover(#{cfg := #cfg{log_id = LogId, + machine_version = MacVer, + effective_machine_version = EffMacVer}, commit_index := CommitIndex, - machine_version := MacVer, - effective_machine_version := EffMacVer, last_applied := LastApplied} = State0) -> ?DEBUG("~s: recovering state machine version ~b:~b from index ~b to ~b~n", [LogId, EffMacVer, MacVer, LastApplied, CommitIndex]), @@ -316,7 +312,9 @@ recover(#{id := {_, _, LogId}, handle_leader({PeerId, #append_entries_reply{term = Term, success = true, next_index = NextIdx, last_index = LastIdx}}, - State0 = #{current_term := Term, id := {Id, _, LogId}}) -> + #{current_term := Term, + cfg := #cfg{id = Id, + log_id = LogId}} = State0) -> case peer(PeerId, State0) of undefined -> ?WARN("~s: saw append_entries_reply from unknown peer ~w~n", @@ -344,11 +342,11 @@ handle_leader({PeerId, #append_entries_reply{term = Term, success = true, end, Effects = Effects1 ++ RpcEffects, case State of - #{id := {Id, _, _}, cluster := #{Id := _}} -> + #{cluster := #{Id := _}} -> % leader is in the cluster {leader, State, Effects}; - #{commit_index := CI, cluster_index_term := {CITIndex, _}, - id := {_, _, LogId}} + #{commit_index := CI, + cluster_index_term := {CITIndex, _}} when CI >= CITIndex -> % leader is not in the cluster and the new cluster % config has been committed @@ -361,23 +359,24 @@ handle_leader({PeerId, #append_entries_reply{term = Term, success = true, end; handle_leader({PeerId, #append_entries_reply{term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> case peer(PeerId, State0) of undefined -> - ?WARN("~s saw append_entries_reply from unknown peer ~w~n", + ?WARN("~s: saw append_entries_reply from unknown peer ~w~n", [LogId, PeerId]), {leader, State0, []}; _ -> - ?NOTICE("~s leader saw append_entries_reply for term ~b " + ?NOTICE("~s: leader saw append_entries_reply from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader({PeerId, #append_entries_reply{success = false, next_index = NextIdx, last_index = LastIdx, last_term = LastTerm}}, - State0 = #{id := {_, _, LogId}, + State0 = #{cfg := #cfg{log_id = LogId}, cluster := Nodes, log := Log0}) -> #{PeerId := Peer0 = #{match_index := MI, next_index := NI}} = Nodes, @@ -428,7 +427,7 @@ handle_leader({PeerId, #append_entries_reply{success = false, State1 = State0#{cluster => Nodes#{PeerId => Peer}, log => Log}, {State, _, Effects} = make_pipelined_rpc_effects(State1, []), {leader, State, Effects}; -handle_leader({command, Cmd}, State00 = #{id := {_, _, LogId}}) -> +handle_leader({command, Cmd}, #{cfg := #cfg{log_id = LogId}} = State00) -> case append_log_leader(Cmd, State00) of {not_appended, Reason, State} -> ?WARN("~s command ~W NOT appended to log. Reason ~w", @@ -483,7 +482,8 @@ handle_leader({ra_log_event, Evt}, State = #{log := Log0}) -> handle_leader({aux_command, Type, Cmd}, State0) -> handle_aux(leader, Type, Cmd, State0); handle_leader({PeerId, #install_snapshot_result{term = Term}}, - #{id := {_, _, LogId}, current_term := CurTerm} = State0) + #{cfg := #cfg{log_id = LogId}, + current_term := CurTerm} = State0) when Term > CurTerm -> case peer(PeerId, State0) of undefined -> @@ -491,12 +491,12 @@ handle_leader({PeerId, #install_snapshot_result{term = Term}}, [LogId, PeerId]), {leader, State0, []}; _ -> - ?DEBUG("~s: leader saw install_snapshot_result for term ~b" - " abdicates term: ~b!~n", [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + ?DEBUG("~s: leader saw install_snapshot_result from ~w for term ~b" + " abdicates term: ~b!~n", [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader({PeerId, #install_snapshot_result{last_index = LastIndex}}, - #{id := {_, _, LogId}} = State0) -> + #{cfg := #cfg{log_id = LogId}} = State0) -> case peer(PeerId, State0) of undefined -> ?WARN("~s: saw install_snapshot_result from unknown peer ~w~n", @@ -532,7 +532,8 @@ handle_leader(pipeline_rpcs, State0) -> handle_leader(#install_snapshot_rpc{term = Term, leader_id = Leader} = Evt, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> case peer(Leader, State0) of undefined -> ?WARN("~s: saw install_snapshot_rpc from unknown leader ~w~n", @@ -541,26 +542,28 @@ handle_leader(#install_snapshot_rpc{term = Term, _ -> ?INFO("~s: leader saw install_snapshot_rpc from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Evt#install_snapshot_rpc.leader_id, - Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Evt}]} + [LogId, Evt#install_snapshot_rpc.leader_id, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Evt}]} end; handle_leader(#append_entries_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> ?INFO("~s: leader saw append_entries_rpc from ~w for term ~b " "abdicates term: ~b!~n", [LogId, Msg#append_entries_rpc.leader_id, Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]}; + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]}; handle_leader(#append_entries_rpc{term = Term}, #{current_term := Term, - id := {_, _, LogId}}) -> + cfg := #cfg{log_id = LogId}}) -> ?ERR("~s: leader saw append_entries_rpc for same term ~b" " this should not happen!~n", [LogId, Term]), exit(leader_saw_append_entries_rpc_in_same_term); handle_leader(#append_entries_rpc{leader_id = LeaderId}, #{current_term := CurTerm, - id := {Id, _, _}} = State0) -> + cfg := #cfg{id = Id}} = State0) -> Reply = append_entries_reply(CurTerm, false, State0), {leader, State0, [cast_reply(Id, LeaderId, Reply)]}; handle_leader({consistent_query, From, QueryFun}, @@ -578,20 +581,22 @@ handle_leader({consistent_query, From, QueryFun}, %% Lihtweight version of append_entries_rpc handle_leader(#heartbeat_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when CurTerm < Term -> ?INFO("~s: leader saw heartbeat_rpc from ~w for term ~b " "abdicates term: ~b!~n", [LogId, Msg#heartbeat_rpc.leader_id, Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]}; + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]}; handle_leader(#heartbeat_rpc{term = Term, leader_id = LeaderId}, - #{current_term := CurTerm, id := {Id, _, _}} = State) + #{current_term := CurTerm, + cfg := #cfg{id = Id}} = State) when CurTerm > Term -> Reply = heartbeat_reply(State), {leader, State, [cast_reply(Id, LeaderId, Reply)]}; handle_leader(#heartbeat_rpc{term = Term}, - #{current_term := CurTerm, id := {_, _, LogId}}) + #{current_term := CurTerm, cfg := #cfg{log_id = LogId}}) when CurTerm == Term -> ?ERR("~s: leader saw heartbeat_rpc for same term ~b" " this should not happen!~n", [LogId, Term]), @@ -599,7 +604,7 @@ handle_leader(#heartbeat_rpc{term = Term}, handle_leader({PeerId, #heartbeat_reply{query_index = ReplyQueryIndex, term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) -> + cfg := #cfg{log_id = LogId}} = State0) -> case {CurTerm, Term} of {Same, Same} -> %% Heartbeat confirmed @@ -615,14 +620,14 @@ handle_leader({PeerId, #heartbeat_reply{query_index = ReplyQueryIndex, {leader, State0, []}; {CurLower, TermHigher} when CurLower < TermHigher -> %% A node with higher term confirmed heartbeat. This should not happen - ?NOTICE("~s leader saw heartbeat_reply for term ~b " + ?NOTICE("~s leader saw heartbeat_reply from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader(#request_vote_rpc{term = Term, candidate_id = Cand} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> case peer(Cand, State0) of undefined -> ?WARN("~s: leader saw request_vote_rpc for unknown peer ~w~n", @@ -631,24 +636,25 @@ handle_leader(#request_vote_rpc{term = Term, candidate_id = Cand} = Msg, _ -> ?INFO("~s: leader saw request_vote_rpc from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Msg#request_vote_rpc.candidate_id, - Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]} + [LogId, Msg#request_vote_rpc.candidate_id, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]} end; handle_leader(#request_vote_rpc{}, State = #{current_term := Term}) -> Reply = #request_vote_result{term = Term, vote_granted = false}, {leader, State, [{reply, Reply}]}; handle_leader(#pre_vote_rpc{term = Term, candidate_id = Cand} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> case peer(Cand, State0) of undefined -> ?WARN("~s: leader saw pre_vote_rpc for unknown peer ~w~n", [LogId, Cand]), {leader, State0, []}; _ -> - ?INFO("~s: leader saw pre_vote_rpc for term ~b" - " abdicates term: ~b!~n", [LogId, Term, CurTerm]), + ?INFO("~s: leader saw pre_vote_rpc from ~w for term ~b" + " abdicates term: ~b!~n", + [LogId, Msg#pre_vote_rpc.candidate_id, Term, CurTerm]), {follower, update_term(Term, State0), [{next_event, Msg}]} end; handle_leader(#pre_vote_rpc{term = Term}, @@ -664,12 +670,12 @@ handle_leader(#pre_vote_result{}, State) -> %% handle to avoid logging as unhandled {leader, State, []}; handle_leader({transfer_leadership, Leader}, - State = #{id := {Leader, _, LogId}}) -> + #{cfg := #cfg{id = Leader, log_id = LogId}} = State) -> ?DEBUG("~s: transfer leadership requested but already leader", [LogId]), {leader, State, [{reply, already_leader}]}; handle_leader({transfer_leadership, ServerId}, - #{id := {_, _, LogId}} = State) -> + #{cfg := #cfg{log_id = LogId}} = State) -> ?DEBUG("~s: transfer leadership to ~w requested", [LogId, ServerId]), %% TODO find a timeout @@ -690,10 +696,10 @@ handle_leader(Msg, State) -> -spec handle_candidate(ra_msg() | election_timeout, ra_server_state()) -> {ra_state(), ra_server_state(), effects()}. handle_candidate(#request_vote_result{term = Term, vote_granted = true}, - #{current_term := Term, + #{cfg := #cfg{id = Id, + machine = Mac}, + current_term := Term, votes := Votes, - machine := Mac, - id := {Id, _, _}, cluster := Nodes} = State0) -> NewVotes = Votes + 1, case trunc(maps:size(Nodes) / 2) + 1 of @@ -709,7 +715,7 @@ handle_candidate(#request_vote_result{term = Term, vote_granted = true}, end; handle_candidate(#request_vote_result{term = Term}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate request_vote_result with higher term" " received ~b -> ~b", [LogId, CurTerm, Term]), @@ -735,7 +741,7 @@ handle_candidate(#heartbeat_rpc{leader_id = LeaderId}, State) -> Reply = heartbeat_reply(State), {candidate, State, [cast_reply(id(State), LeaderId, Reply)]}; handle_candidate({_PeerId, #heartbeat_reply{term = Term}}, - #{id := {_, _, LogId}, + #{cfg := #cfg{log_id = LogId}, current_term := CurTerm} = State0) when Term > CurTerm -> ?INFO("~s: candidate heartbeat_reply with higher" " term received ~b -> ~b~n", @@ -744,7 +750,7 @@ handle_candidate({_PeerId, #heartbeat_reply{term = Term}}, {follower, State, []}; handle_candidate({_PeerId, #append_entries_reply{term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate append_entries_reply with higher" " term received ~b -> ~b~n", @@ -753,7 +759,7 @@ handle_candidate({_PeerId, #append_entries_reply{term = Term}}, {follower, State, []}; handle_candidate(#request_vote_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate request_vote_rpc with higher term received ~b -> ~b~n", [LogId, CurTerm, Term]), @@ -761,7 +767,7 @@ handle_candidate(#request_vote_rpc{term = Term} = Msg, {follower, State, [{next_event, Msg}]}; handle_candidate(#pre_vote_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate pre_vote_rpc with higher term received ~b -> ~b~n", [LogId, CurTerm, Term]), @@ -833,7 +839,7 @@ handle_pre_vote(#pre_vote_result{term = Term, vote_granted = true, token = Token}, #{current_term := Term, votes := Votes, - id := {_, _, LogId}, + cfg := #cfg{log_id = LogId}, pre_vote_token := Token, cluster := Nodes} = State0) -> ?DEBUG("~s: pre_vote granted ~w for term ~b votes ~b~n", @@ -879,8 +885,10 @@ handle_follower(#append_entries_rpc{term = Term, prev_log_index = PLIdx, prev_log_term = PLTerm, entries = Entries0}, - State00 = #{log := Log00, - id := {Id, _, LogId}, current_term := CurTerm}) + State00 = #{cfg := #cfg{log_id = LogId, + id = Id}, + log := Log00, + current_term := CurTerm}) when Term >= CurTerm -> %% this is a valid leader, append entries message Effects0 = [{record_leader_msg, LeaderId}], @@ -972,7 +980,7 @@ handle_follower(#append_entries_rpc{term = Term, Effects} end; handle_follower(#append_entries_rpc{term = _Term, leader_id = LeaderId}, - #{id := {Id, _, LogId}, + #{cfg := #cfg{id = Id, log_id = LogId}, current_term := CurTerm} = State) -> % the term is lower than current term Reply = append_entries_reply(CurTerm, false, State), @@ -982,7 +990,8 @@ handle_follower(#append_entries_rpc{term = _Term, leader_id = LeaderId}, {follower, State, [cast_reply(Id, LeaderId, Reply)]}; handle_follower(#heartbeat_rpc{query_index = RpcQueryIndex, term = Term, leader_id = LeaderId}, - #{current_term := CurTerm, id := {Id, _, _}} = State0) + #{current_term := CurTerm, + cfg := #cfg{id = Id}} = State0) when Term >= CurTerm -> State1 = update_term(Term, State0), #{query_index := QueryIndex} = State1, @@ -991,14 +1000,15 @@ handle_follower(#heartbeat_rpc{query_index = RpcQueryIndex, term = Term, Reply = heartbeat_reply(State2), {follower, State2, [cast_reply(Id, LeaderId, Reply)]}; handle_follower(#heartbeat_rpc{leader_id = LeaderId}, - #{id := {Id, _, _}} = State)-> + #{cfg := #cfg{id = Id}} = State)-> Reply = heartbeat_reply(State), {follower, State, [cast_reply(Id, LeaderId, Reply)]}; handle_follower({ra_log_event, {written, _} = Evt}, State0 = #{log := Log0, - id := {Id, _, _}, + cfg := #cfg{id = Id}, leader_id := LeaderId, - current_term := Term}) -> + current_term := Term}) + when LeaderId =/= undefined -> {Log, Effects} = ra_log:handle_event(Evt, Log0), State = State0#{log => Log}, Reply = append_entries_reply(Term, true, State), @@ -1011,7 +1021,7 @@ handle_follower(#pre_vote_rpc{} = PreVote, State) -> process_pre_vote(follower, PreVote, State); handle_follower(#request_vote_rpc{candidate_id = Cand, term = Term}, #{current_term := Term, voted_for := VotedFor, - id := {_, _, LogId}} = State) + cfg := #cfg{log_id = LogId}} = State) when VotedFor /= undefined andalso VotedFor /= Cand -> % already voted for another in this term ?DEBUG("~w: follower request_vote_rpc for ~w already voted for ~w in ~b", @@ -1022,7 +1032,7 @@ handle_follower(#request_vote_rpc{term = Term, candidate_id = Cand, last_log_index = LLIdx, last_log_term = LLTerm}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term >= CurTerm -> State1 = update_term(Term, State0), LastIdxTerm = last_idx_term(State1), @@ -1045,7 +1055,7 @@ handle_follower(#request_vote_rpc{term = Term, candidate_id = Cand, end; handle_follower(#request_vote_rpc{term = Term, candidate_id = _Cand}, State = #{current_term := CurTerm, - id := {_, _, LogId}}) + cfg := #cfg{log_id = LogId}}) when Term < CurTerm -> ?INFO("~s: declining vote to ~w for term ~b, current term ~b~n", [LogId, _Cand, Term, CurTerm]), @@ -1062,7 +1072,7 @@ handle_follower({_PeerId, #heartbeat_reply{term = TheirTerm}}, handle_follower(#install_snapshot_rpc{term = Term, meta = #{index := LastIndex, term := LastTerm}}, - State = #{id := {_, _, LogId}, current_term := CurTerm}) + State = #{cfg := #cfg{log_id = LogId}, current_term := CurTerm}) when Term < CurTerm -> ?DEBUG("~s: install_snapshot old term ~b in ~b~n", [LogId, LastIndex, LastTerm]), @@ -1077,7 +1087,7 @@ handle_follower(#install_snapshot_rpc{term = Term, meta = #{index := SnapIdx} = Meta, leader_id = LeaderId, chunk_state = {1, _ChunkFlag}} = Rpc, - #{id := {_, _, LogId}, log := Log0, + #{cfg := #cfg{log_id = LogId}, log := Log0, last_applied := LastApplied, current_term := CurTerm} = State0) when Term >= CurTerm andalso SnapIdx > LastApplied -> @@ -1117,7 +1127,8 @@ handle_receive_snapshot(#install_snapshot_rpc{term = Term, term := LastTerm}, chunk_state = {Num, ChunkFlag}, data = Data}, - #{id := {Id, _, LogId}, log := Log0, + #{cfg := #cfg{id = Id, log_id = LogId}, + log := Log0, current_term := CurTerm} = State0) when Term >= CurTerm -> ?DEBUG("~s: receiving snapshot chunk: ~b / ~w~n", @@ -1208,37 +1219,45 @@ process_new_leader_queries(#{pending_consistent_queries := Pending, From0 ++ From1}. -spec tick(ra_server_state()) -> effects(). -tick(#{effective_machine_module := MacMod, +tick(#{cfg := #cfg{effective_machine_module = MacMod}, machine_state := MacState}) -> Now = os:system_time(millisecond), ra_machine:tick(MacMod, Now, MacState). -spec handle_state_enter(ra_state() | eol, ra_server_state()) -> {ra_server_state() | eol, effects()}. -handle_state_enter(RaftState, #{effective_machine_module := MacMod, +handle_state_enter(RaftState, #{cfg := #cfg{effective_machine_module = MacMod}, machine_state := MacState} = State) -> {become(RaftState, State), ra_machine:state_enter(MacMod, RaftState, MacState)}. -spec overview(ra_server_state()) -> map(). -overview(#{log := Log, effective_machine_module := MacMod, - aux_state := Aux, - machine_state := MacState} = State) -> - O = maps:with([uid, current_term, commit_index, last_applied, - cluster, leader_id, voted_for, - machine_version, effective_machine_version], State), +overview(#{cfg := #cfg{effective_machine_module = MacMod} = Cfg, + log := Log, + machine_state := MacState, + aux_state := Aux + } = State) -> + O0 = maps:with([current_term, commit_index, last_applied, + cluster, leader_id, voted_for], State), + O = maps:merge(O0, cfg_to_map(Cfg)), LogOverview = ra_log:overview(Log), MacOverview = ra_machine:overview(MacMod, MacState), O#{log => LogOverview, aux => Aux, machine => MacOverview}. +cfg_to_map(Cfg) -> + element(2, lists:foldl( + fun (F, {N, Acc}) -> + {N, Acc#{F => element(N, Cfg)}} + end, {2, #{}}, record_info(fields, cfg))). + -spec metrics(ra_server_state()) -> {atom(), ra_term(), ra_index(), ra_index(), ra_index(), ra_index(), non_neg_integer()}. -metrics(#{metrics_key := Key, +metrics(#{cfg := #cfg{metrics_key = Key}, commit_index := CI, last_applied := LA, current_term := CT, @@ -1275,8 +1294,8 @@ is_fully_replicated(#{commit_index := CI} = State) -> MinMI >= CI end. -handle_aux(RaftState, Type, Cmd, #{aux_state := Aux0, log := Log0, - effective_machine_module := MacMod, +handle_aux(RaftState, Type, Cmd, #{cfg := #cfg{effective_machine_module = MacMod}, + aux_state := Aux0, log := Log0, machine_state := MacState0} = State0) -> case ra_machine:handle_aux(MacMod, RaftState, Type, Cmd, Aux0, Log0, MacState0) of @@ -1297,12 +1316,13 @@ handle_aux(RaftState, Type, Cmd, #{aux_state := Aux0, log := Log0, % property helpers -spec id(ra_server_state()) -> ra_server_id(). -id(#{id := {Id, _, _}}) -> Id. +id(#{cfg := #cfg{id = Id}}) -> Id. -log_id(#{id := {_, _, LogId}}) -> LogId. +-spec log_id(ra_server_state()) -> unicode:chardata(). +log_id(#{cfg := #cfg{log_id = LogId}}) -> LogId. -spec uid(ra_server_state()) -> ra_uid(). -uid(#{id := {_, UId, _}}) -> UId. +uid(#{cfg := #cfg{uid = UId}}) -> UId. -spec leader_id(ra_server_state()) -> maybe(ra_server_id()). leader_id(State) -> @@ -1312,6 +1332,18 @@ leader_id(State) -> current_term(State) -> maps:get(current_term, State). +-spec machine_query(fun((term()) -> term()), ra_server_state()) -> + {ra_idxterm(), term()}. +machine_query(QueryFun, #{cfg := #cfg{effective_machine_module = MacMod}, + machine_state := MacState, + last_applied := Last, + current_term := Term + }) -> + Res = ra_machine:query(MacMod, QueryFun, MacState), + {{Last, Term}, Res}. + + + % Internal become(leader, #{cluster := Cluster, log := Log0} = State) -> @@ -1375,7 +1407,7 @@ transfer_leadership_condition(_Msg, State) -> {false, State}. evaluate_commit_index_follower(#{commit_index := CommitIndex, - id := {Id, _, _}, + cfg := #cfg{id = Id}, leader_id := LeaderId, last_applied := LastApplied0, current_term := Term, @@ -1448,10 +1480,12 @@ filter_follower_effects(Effects) -> make_pipelined_rpc_effects(State, Effects) -> make_pipelined_rpc_effects(?AER_CHUNK_SIZE, State, Effects). -make_pipelined_rpc_effects(MaxBatchSize, #{id := {Id, _, _}, - commit_index := CommitIndex, - log := Log, - cluster := Cluster} = State, +make_pipelined_rpc_effects(MaxBatchSize, + #{cfg := #cfg{id = Id, + max_pipeline_count = MaxPipelineCount}, + commit_index := CommitIndex, + log := Log, + cluster := Cluster} = State, Effects) -> NextLogIdx = ra_log:next_index(Log), maps:fold( @@ -1470,16 +1504,15 @@ make_pipelined_rpc_effects(MaxBatchSize, #{id := {Id, _, _}, % there are unsent items or a new commit index % check if the match index isn't too far behind the % next index - case NI - MI < ?MAX_PIPELINE_DISTANCE of + case NI - MI < MaxPipelineCount of true -> {NextIdx, Eff, S} = - make_rpc_effect(PeerId, NI, - MaxBatchSize, S0), + make_rpc_effect(PeerId, NI, MaxBatchSize, S0), Peer = Peer0#{next_index => NextIdx, commit_index_sent => CommitIndex}, %% is there more potentially pipelining More = More0 orelse (NextIdx < NextLogIdx andalso - NextIdx - MI < ?MAX_PIPELINE_DISTANCE), + NextIdx - MI < MaxPipelineCount), {update_peer(PeerId, Peer, S), More, [Eff | Effs]}; @@ -1509,7 +1542,7 @@ make_rpcs_for(Peers, State) -> end, {State, []}, Peers). make_rpc_effect(PeerId, Next, MaxBatchSize, - #{id := {Id, _, _}, log := Log0, + #{cfg := #cfg{id = Id}, log := Log0, current_term := Term} = State) -> PrevIdx = Next - 1, case ra_log:fetch_term(PrevIdx, Log0) of @@ -1538,7 +1571,7 @@ make_rpc_effect(PeerId, Next, MaxBatchSize, make_append_entries_rpc(PeerId, PrevIdx, PrevTerm, Num, #{log := Log0, current_term := Term, - id := {Id, _, _}, + cfg := #cfg{id = Id}, commit_index := CommitIndex} = State) -> Next = PrevIdx + 1, %% TODO: refactor to avoid lists:last call later @@ -1587,7 +1620,7 @@ persist_last_applied(#{persisted_last_applied := PLA, % if last applied is less than PL for some reason do nothing State; persist_last_applied(#{last_applied := LastApplied, - id := {_, UId, _}} = State) -> + cfg := #cfg{uid = UId}} = State) -> ok = ra_log_meta:store(UId, last_applied, LastApplied), State#{persisted_last_applied => LastApplied}. @@ -1630,13 +1663,13 @@ handle_down(leader, machine, Pid, Info, State) {down, Pid, Info}, noreply}}, State); handle_down(leader, snapshot_sender, Pid, Info, - #{id := {_, _, LogId}} = State) + #{cfg := #cfg{log_id = LogId}} = State) when is_pid(Pid) -> ?DEBUG("~s: Snapshot sender process ~w exited with ~W~n", [LogId, Pid, Info, 10]), {leader, peer_snapshot_process_exited(Pid, State), []}; handle_down(RaftState, snapshot_writer, Pid, Info, - #{id := {_, _, LogId}, log := Log0} = State) + #{cfg := #cfg{log_id = LogId}, log := Log0} = State) when is_pid(Pid) -> case Info of noproc -> ok; @@ -1655,7 +1688,7 @@ handle_down(RaftState, log, Pid, Info, #{log := Log0} = State) -> handle_down(RaftState, aux, Pid, Info, State) when is_pid(Pid) -> handle_aux(RaftState, cast, {down, Pid, Info}, State); -handle_down(RaftState, Type, Pid, Info, #{id := {_, _, LogId}} = State) -> +handle_down(RaftState, Type, Pid, Info, #{cfg := #cfg{log_id = LogId}} = State) -> ?INFO("~s: handle_down: unexpected ~w ~w exited with ~W~n", [LogId, Type, Pid, Info, 10]), {RaftState, State, []}. @@ -1675,18 +1708,18 @@ handle_node_status(RaftState, aux, Node, Status, _Infos, State) when is_atom(Node) -> handle_aux(RaftState, cast, {Status, Node}, State); handle_node_status(RaftState, Type, Node, Status, _Info, - #{id := {_, _, LogId}} = State) -> + #{cfg := #cfg{log_id = LogId}} = State) -> ?DEBUG("~s: handle_node_status: unexpected ~w ~w status change ~w~n", [LogId, Type, Node, Status]), {RaftState, State, []}. -spec terminate(ra_server_state(), Reason :: {shutdown, delete} | term()) -> ok. terminate(#{log := Log, - id := {_, _, LogId}} = _State, {shutdown, delete}) -> + cfg := #cfg{log_id = LogId}} = _State, {shutdown, delete}) -> ?NOTICE("~s: terminating with reason 'delete'~n", [LogId]), catch ra_log:delete_everything(Log), ok; -terminate(#{id := {_, _, LogId}} = State, Reason) -> +terminate(#{cfg := #cfg{log_id = LogId}} = State, Reason) -> ?DEBUG("~s: terminating with reason '~w'~n", [LogId, Reason]), #{log := Log} = persist_last_applied(State), catch ra_log:close(Log), @@ -1714,7 +1747,7 @@ log_fold(#{log := Log} = RaState, Fun, State) -> {ok, term(), ra_server_state()} | {error, ra_server_state()}. read_at(Idx, #{log := Log0, - id := {_, _, LogId}} = RaState) -> + cfg := #cfg{log_id = LogId}} = RaState) -> case ra_log:fetch(Idx, Log0) of {{Idx, _, {'$usr', _, Data, _}}, Log} -> {ok, Data, RaState#{log => Log}}; @@ -1727,7 +1760,7 @@ read_at(Idx, #{log := Log0, %%% Internal functions %%%=================================================================== -call_for_election(candidate, #{id := {Id, _, LogId}, +call_for_election(candidate, #{cfg := #cfg{id = Id, log_id = LogId}, current_term := CurrentTerm} = State0) -> NewTerm = CurrentTerm + 1, ?DEBUG("~s: election called for in term ~b~n", [LogId, NewTerm]), @@ -1744,8 +1777,9 @@ call_for_election(candidate, #{id := {Id, _, LogId}, State = update_term_and_voted_for(NewTerm, Id, State0), {candidate, State#{leader_id => undefined, votes => 0}, [{next_event, cast, VoteForSelf}, {send_vote_requests, Reqs}]}; -call_for_election(pre_vote, #{id := {Id, _, LogId}, - machine_version := MacVer, +call_for_election(pre_vote, #{cfg := #cfg{id = Id, + log_id = LogId, + machine_version = MacVer}, current_term := Term} = State0) -> ?DEBUG("~s: pre_vote election called for in term ~b~n", [LogId, Term]), Token = make_ref(), @@ -1772,8 +1806,8 @@ process_pre_vote(FsmState, #pre_vote_rpc{term = Term, candidate_id = Cand, token = Token, last_log_index = LLIdx, last_log_term = LLTerm}, - #{current_term := CurTerm, - machine_version := OurMacVer}= State0) + #{cfg := #cfg{machine_version = OurMacVer}, + current_term := CurTerm} = State0) when Term >= CurTerm -> State = update_term(Term, State0), LastIdxTerm = last_idx_term(State), @@ -1833,7 +1867,7 @@ new_peer() -> new_peer_with(Map) -> maps:merge(new_peer(), Map). -peers(#{id := {Id, _, _}, cluster := Peers}) -> +peers(#{cfg := #cfg{id = Id}, cluster := Peers}) -> maps:remove(Id, Peers). %% remove any peers that are currently receiving a snapshot @@ -1844,7 +1878,7 @@ peers_not_sending_snapshots(State) -> % peers that could need an update stale_peers(#{commit_index := CommitIndex, - id := {ThisId, _, _}, + cfg := #cfg{id = ThisId}, cluster := Cluster}) -> maps:filter(fun (Id , _) when Id == ThisId -> false; @@ -1872,7 +1906,7 @@ peer(PeerId, #{cluster := Nodes}) -> update_peer(PeerId, Peer, #{cluster := Nodes} = State) -> State#{cluster => Nodes#{PeerId => Peer}}. -update_term_and_voted_for(Term, VotedFor, #{id := {_, UId, _}, +update_term_and_voted_for(Term, VotedFor, #{cfg := #cfg{uid = UId}, current_term := CurTerm} = State) -> CurVotedFor = maps:get(voted_for, State, undefined), case Term =:= CurTerm andalso VotedFor =:= CurVotedFor of @@ -1964,9 +1998,9 @@ apply_to(ApplyTo, ApplyFun, State, Effs) -> apply_to(ApplyTo, ApplyFun, Notifys0, Effects0, #{last_applied := LastApplied, - machine_version := MacVer, - effective_machine_module := MacMod, - effective_machine_version := EffMacVer, + cfg := #cfg{machine_version = MacVer, + effective_machine_module = MacMod, + effective_machine_version = EffMacVer}, machine_state := MacState0} = State0) when ApplyTo > LastApplied andalso MacVer >= EffMacVer -> From = LastApplied + 1, @@ -2009,15 +2043,15 @@ make_notify_effects(Nots, Prior) -> apply_with(_Cmd, {Mod, LastAppliedIdx, - #{machine_version := MacVer, - effective_machine_version := Effective} = State, + #{cfg := #cfg{machine_version = MacVer, + effective_machine_version = Effective}} = State, MacSt, Effects, Notifys, LastTs}) when MacVer < Effective -> %% we cannot apply any further entries {Mod, LastAppliedIdx, State, MacSt, Effects, Notifys, LastTs}; apply_with({Idx, Term, {'$usr', CmdMeta, Cmd, ReplyType}}, {Module, _LastAppliedIdx, - State = #{effective_machine_version := MacVer}, + State = #{cfg := #cfg{effective_machine_version = MacVer}}, MacSt, Effects, Notifys0, LastTs}) -> %% augment the meta data structure Meta = augment_command_meta(Idx, Term, MacVer, CmdMeta), @@ -2056,14 +2090,16 @@ apply_with({Idx, Term, {'$ra_cluster_change', CmdMeta, NewCluster, ReplyType}}, {Mod, Idx, State, MacSt, Effects, Notifys, LastTs}; apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, {CurModule, LastAppliedIdx, - #{current_term := CurrentTerm, - machine := Machine, - machine_version := MacVer, - %% active machine versions and their index (from last snapshot) - machine_versions := MacVersions, - cluster_change_permitted := ClusterChangePerm0, - effective_machine_version := OldMacVer, - id := {_, _, LogId}} = State0, + #{cfg := #cfg{log_id = LogId, + machine_version = MacVer, + %% active machine versions and their index + %% (from last snapshot) + machine = Machine, + machine_versions = MacVersions, + effective_machine_version = OldMacVer + } = Cfg0, + current_term := CurrentTerm, + cluster_change_permitted := ClusterChangePerm0} = State0, MacSt, Effects, Notifys, LastTs}) -> ClusterChangePerm = case CurrentTerm of Term -> @@ -2079,11 +2115,12 @@ apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, %% discover the next module to use Module = ra_machine:which_module(Machine, NextMacVer), %% enable cluster change if the noop command is for the current term - State = State0#{cluster_change_permitted => ClusterChangePerm, - effective_machine_version => NextMacVer, - %% record this machine version "term" - machine_versions => [{Idx, MacVer} | MacVersions], - effective_machine_module => Module}, + Cfg = Cfg0#cfg{effective_machine_version = NextMacVer, + %% record this machine version "term" + machine_versions = [{Idx, MacVer} | MacVersions], + effective_machine_module = Module}, + State = State0#{cfg => Cfg, + cluster_change_permitted => ClusterChangePerm}, Meta = augment_command_meta(Idx, Term, MacVer, CmdMeta), apply_with({Idx, Term, {'$usr', Meta, @@ -2099,7 +2136,8 @@ apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, ?DEBUG("~s: unknown machine version ~b current ~b" " cannot apply any further entries~n", [LogId, NextMacVer, MacVer]), - State = State0#{effective_machine_version => NextMacVer}, + Cfg = Cfg0#cfg{effective_machine_version = NextMacVer}, + State = State0#{cfg => Cfg}, {CurModule, LastAppliedIdx, State, MacSt, Effects, Notifys, LastTs}; false -> @@ -2171,7 +2209,7 @@ append_log_leader({'$ra_join', From, JoiningNode, ReplyMode}, append_cluster_change(Cluster, From, ReplyMode, State) end; append_log_leader({'$ra_leave', From, LeavingServer, ReplyMode}, - State = #{id := {_, _, LogId}, + State = #{cfg := #cfg{log_id = LogId}, cluster := OldCluster}) -> case OldCluster of #{LeavingServer := _} -> @@ -2283,7 +2321,7 @@ increment_commit_index(State = #{current_term := CurrentTerm}) -> State#{log => Log} end. -query_indexes(#{id := {Id, _, _}, +query_indexes(#{cfg := #cfg{id = Id}, cluster := Cluster, query_index := QueryIndex}) -> maps:fold(fun (PeerId, _, Acc) when PeerId == Id -> @@ -2292,7 +2330,7 @@ query_indexes(#{id := {Id, _, _}, [Idx | Acc] end, [QueryIndex], Cluster). -match_indexes(#{id := {Id, _, _}, +match_indexes(#{cfg := #cfg{id = Id}, cluster := Cluster, log := Log}) -> {LWIdx, _} = ra_log:last_written(Log), @@ -2308,7 +2346,7 @@ agreed_commit(Indexes) -> Nth = trunc(length(SortedIdxs) / 2) + 1, lists:nth(Nth, SortedIdxs). -log_unhandled_msg(RaState, Msg, #{id := {_, _, LogId}}) -> +log_unhandled_msg(RaState, Msg, #{cfg := #cfg{log_id = LogId}}) -> ?DEBUG("~s: ~w received unhandled msg: ~W~n", [LogId, RaState, Msg, 6]). fold_log_from(From, Folder, {St, Log0}) -> @@ -2339,7 +2377,7 @@ cast_reply(From, To, Msg) -> {cast, To, {From, Msg}}. -index_machine_version(Idx, #{machine_versions := Versions}) -> +index_machine_version(Idx, #{cfg := #cfg{machine_versions = Versions}}) -> %% scan for versions index_machine_version0(Idx, Versions). @@ -2358,7 +2396,7 @@ heartbeat_reply(#{current_term := CurTerm, query_index := QueryIndex}) -> update_heartbeat_rpc_effects(#{query_index := QueryIndex, queries_waiting_heartbeats := Waiting, current_term := Term, - id := {Id, _, _}} = State) -> + cfg := #cfg{id = Id}} = State) -> Peers = peers(State), %% TODO: do a quorum evaluation to find a queries to apply and apply all %% queries until that point @@ -2377,7 +2415,7 @@ make_heartbeat_rpc_effects(QueryRef, #{query_index := QueryIndex, queries_waiting_heartbeats := Waiting0, current_term := Term, - id := {Id, _, _}} = State0) -> + cfg := #cfg{id = Id}} = State0) -> Peers = peers(State0), %% TODO: do a quorum evaluation to find a queries to apply and apply all %% queries until that point @@ -2486,9 +2524,10 @@ apply_consistent_queries_effects(QueryRefs, -spec consistent_query_reply(consistent_query_ref(), ra_server_state()) -> effect(). consistent_query_reply({From, QueryFun, _ReadCommitIndex}, - #{id := {Id, _, _}, - machine_state := MacState, - machine := {machine, MacMod, _}}) -> + #{cfg := #cfg{id = Id, + machine = {machine, MacMod, _}}, + machine_state := MacState + }) -> Result = ra_machine:query(MacMod, QueryFun, MacState), {reply, From, {ok, Result, Id}}. @@ -2513,19 +2552,19 @@ process_pending_consistent_queries(#{cluster_change_permitted := true, -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -index_machine_version_test() -> - S0 = #{machine_versions => [{0, 0}]}, - ?assertEqual(0, index_machine_version(0, S0)), - ?assertEqual(0, index_machine_version(1123456, S0)), - - S1 = #{machine_versions => [{100, 4}, {50, 3}, {25, 2}]}, - ?assertEqual(4, index_machine_version(101, S1)), - ?assertEqual(4, index_machine_version(100, S1)), - ?assertEqual(3, index_machine_version(99, S1)), - ?assertEqual(2, index_machine_version(49, S1)), - ?assertEqual(2, index_machine_version(25, S1)), +index_machine_version0_test() -> + S0 = [{0, 0}], + ?assertEqual(0, index_machine_version0(0, S0)), + ?assertEqual(0, index_machine_version0(1123456, S0)), + + S1 = [{100, 4}, {50, 3}, {25, 2}], + ?assertEqual(4, index_machine_version0(101, S1)), + ?assertEqual(4, index_machine_version0(100, S1)), + ?assertEqual(3, index_machine_version0(99, S1)), + ?assertEqual(2, index_machine_version0(49, S1)), + ?assertEqual(2, index_machine_version0(25, S1)), ?assertExit({machine_version_for_index_not_known, _}, - index_machine_version(24, S1)), + index_machine_version0(24, S1)), ok. agreed_commit_test() -> diff --git a/deps/ra/src/ra_server.hrl b/deps/ra/src/ra_server.hrl new file mode 100644 index 0000000000000000000000000000000000000000..33deef4b44e3dd89a3c5e7e2ded378e4f5161677 --- /dev/null +++ b/deps/ra/src/ra_server.hrl @@ -0,0 +1,19 @@ +-define(AER_CHUNK_SIZE, 25). +-define(FOLD_LOG_BATCH_SIZE, 25). +% TODO: test what is a good default here +% TODO: make configurable +-define(DEFAULT_MAX_PIPELINE_COUNT, 4096). +-define(MAX_FETCH_ENTRIES, 4096). + +-record(cfg, + {id :: ra_server_id(), + uid :: ra_uid(), + log_id :: unicode:chardata(), + metrics_key :: term(), + machine :: ra_machine:machine(), + machine_version :: ra_machine:version(), + machine_versions :: [{ra_index(), ra_machine:version()}, ...], + effective_machine_version :: ra_machine:version(), + effective_machine_module :: module(), + max_pipeline_count = ?DEFAULT_MAX_PIPELINE_COUNT :: non_neg_integer() + }). diff --git a/deps/ra/src/ra_server_proc.erl b/deps/ra/src/ra_server_proc.erl index 2f39dfa65d75356f5784f4456437fb5441a6803a..d4d0a52fb3f653b83283cf7711d520833861a1d8 100644 --- a/deps/ra/src/ra_server_proc.erl +++ b/deps/ra/src/ra_server_proc.erl @@ -54,7 +54,6 @@ -define(DEFAULT_STOP_FOLLOWER_ELECTION, false). -define(DEFAULT_AWAIT_CONDITION_TIMEOUT, 30000). %% Utilisation average calculations are all in μs. --define(USE_AVG_HALF_LIFE, 1000000.0). -define(INSTALL_SNAP_RPC_TIMEOUT, 120 * 1000). -define(DEFAULT_RECEIVE_SNAPSHOT_TIMEOUT, 30000). -define(DEFAULT_SNAPSHOT_CHUNK_SIZE, 1000000). % 1MB @@ -162,7 +161,7 @@ cast_command(ServerId, Priority, Cmd) -> -spec query(server_loc(), query_fun(), local | consistent | leader, timeout()) -> ra_server_proc:ra_leader_call_ret(term()) - | {ok, Reply :: term(), ra_server_id() | not_known}. + | {ok, Reply :: term(), not_known}. query(ServerLoc, QueryFun, local, Timeout) -> statem_call(ServerLoc, {local_query, QueryFun}, Timeout); query(ServerLoc, QueryFun, leader, Timeout) -> @@ -238,8 +237,10 @@ multi_statem_call([ServerId | ServerIds], Msg, Errs, Timeout) -> init(Config0 = #{id := Id, cluster_name := ClusterName}) -> process_flag(trap_exit, true), Config = maps:merge(config_defaults(), Config0), - #{id := {_, UId, LogId}, - cluster := Cluster} = ServerState = ra_server:init(Config), + #{cluster := Cluster} = ServerState = ra_server:init(Config), + LogId = ra_server:log_id(ServerState), + UId = ra_server:uid(ServerState), + Id = ra_server:id(ServerState), Key = ra_lib:ra_server_id_to_local_name(Id), % ensure ra_directory has the new pid yes = ra_directory:register_name(UId, self(), @@ -259,8 +260,8 @@ init(Config0 = #{id := Id, cluster_name := ClusterName}) -> TickTime = maps:get(tick_timeout, Config), AwaitCondTimeout = maps:get(await_condition_timeout, Config), RaEventFormatterMFA = maps:get(ra_event_formatter, Config, undefined), - FlushCommandsSize = maps:get(low_priority_commands_flush_size, Config, - ?FLUSH_COMMANDS_SIZE), + FlushCommandsSize = application:get_env(ra, low_priority_commands_flush_size, + ?FLUSH_COMMANDS_SIZE), SnapshotChunkSize = application:get_env(ra, snapshot_chunk_size, ?DEFAULT_SNAPSHOT_CHUNK_SIZE), ReceiveSnapshotTimeout = application:get_env(ra, receive_snapshot_timeout, @@ -731,6 +732,11 @@ terminating_follower(EvtType, Msg, State0) -> {State, Actions} = case follower(EvtType, Msg, State0) of {next_state, terminating_follower, S, A} -> {S, A}; + {next_state, NextState, S, A} -> + ?DEBUG("~s: terminating follower requested state '~s'" + " - remaining in current state", + [LogName, NextState]), + {S, A}; {keep_state, S, A} -> {S, A} end, @@ -941,13 +947,10 @@ handle_receive_snapshot(Msg, State) -> handle_await_condition(Msg, State) -> handle_raft_state(?FUNCTION_NAME, Msg, State). -perform_local_query(QueryFun, Leader, #{effective_machine_module := MacMod, - machine_state := MacState, - last_applied := Last, - current_term := Term}) -> - try ra_machine:query(MacMod, QueryFun, MacState) of +perform_local_query(QueryFun, Leader, ServerState) -> + try ra_server:machine_query(QueryFun, ServerState) of Result -> - {ok, {{Last, Term}, Result}, Leader} + {ok, Result, Leader} catch _:_ = Err -> {error, Err} @@ -1166,12 +1169,12 @@ send_rpc(To, Msg) -> gen_cast(To, Msg) -> send(To, {'$gen_cast', Msg}). -send_ra_event(To, Msg, LeaderId, EvtType, State) -> - send(To, wrap_ra_event(State, LeaderId, EvtType, Msg)). +send_ra_event(To, Msg, FromId, EvtType, State) -> + send(To, wrap_ra_event(State, FromId, EvtType, Msg)). wrap_ra_event(#state{conf = #conf{ra_event_formatter = undefined}}, - LeaderId, EvtType, Evt) -> - {ra_event, LeaderId, {EvtType, Evt}}; + FromId, EvtType, Evt) -> + {ra_event, FromId, {EvtType, Evt}}; wrap_ra_event(#state{conf = #conf{ra_event_formatter = {M, F, A}}}, LeaderId, EvtType, Evt) -> apply(M, F, [LeaderId, {EvtType, Evt} | A]). @@ -1326,7 +1329,7 @@ reject_command(Pid, Corr, State) -> "Rejecting to ~w ~n", [log_id(State), Pid, LeaderId]) end, send_ra_event(Pid, {not_leader, LeaderId, Corr}, - LeaderId, rejected, State). + id(State), rejected, State). maybe_persist_last_applied(#state{server_state = NS} = State) -> State#state{server_state = ra_server:persist_last_applied(NS)}. diff --git a/deps/rabbit/Makefile b/deps/rabbit/Makefile index 0f376393b75b7be42918fc466e828f375fd58f7b..154100e8535a729b064b646334c4fc3d8f6df05f 100644 --- a/deps/rabbit/Makefile +++ b/deps/rabbit/Makefile @@ -97,7 +97,7 @@ define PROJECT_ENV %% see rabbitmq-server#143, %% rabbitmq-server#949, rabbitmq-server#1098 {credit_flow_default_credit, {400, 200}}, - {quorum_commands_soft_limit, 256}, + {quorum_commands_soft_limit, 32}, {quorum_cluster_size, 5}, %% see rabbitmq-server#248 %% and rabbitmq-server#667 @@ -136,11 +136,19 @@ define PROJECT_ENV ] endef -LOCAL_DEPS = sasl mnesia os_mon inets compiler public_key crypto ssl syntax_tools xmerl +# With Erlang.mk default behavior, the value of `$(APPS_DIR)` is always +# relative to the top-level executed Makefile. In our case, it could be +# a plugin for instance. However, the rabbitmq_prelaunch application is +# in this repository, not the plugin's. That's why we need to override +# this value here. +APPS_DIR := $(CURDIR)/apps + +LOCAL_DEPS = sasl rabbitmq_prelaunch os_mon inets compiler public_key crypto ssl syntax_tools xmerl BUILD_DEPS = rabbitmq_cli syslog -DEPS = ranch lager rabbit_common ra sysmon_handler stdout_formatter recon observer_cli +DEPS = cuttlefish ranch lager rabbit_common ra sysmon_handler stdout_formatter recon observer_cli TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers amqp_client meck proper +dep_cuttlefish = hex 2.2.0 dep_syslog = git https://github.com/schlagert/syslog 3.4.5 define usage_xml_to_erl @@ -167,6 +175,9 @@ ERLANG_MK_COMMIT = rabbitmq-tmp include rabbitmq-components.mk include erlang.mk +# See above why we mess with `$(APPS_DIR)`. +unexport APPS_DIR + ifeq ($(strip $(BATS)),) BATS := $(ERLANG_MK_TMP)/bats/bin/bats endif @@ -257,20 +268,6 @@ USE_PROPER_QC := $(shell $(ERL) -eval 'io:format({module, proper} =:= code:ensur RMQ_ERLC_OPTS += $(if $(filter true,$(USE_PROPER_QC)),-Duse_proper_qc) endif -.PHONY: copy-escripts clean-extra-sources clean-escripts - -CLI_ESCRIPTS_DIR = escript - -copy-escripts: - $(gen_verbose) $(MAKE) -C $(DEPS_DIR)/rabbitmq_cli install \ - PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ - DESTDIR= - -clean:: clean-escripts - -clean-escripts: - $(gen_verbose) rm -rf "$(CLI_ESCRIPTS_DIR)" - # -------------------------------------------------------------------- # Documentation. # -------------------------------------------------------------------- @@ -314,5 +311,3 @@ distclean:: distclean-manpages distclean-manpages:: $(gen_verbose) rm -f $(WEB_MANPAGES) - -app-build: copy-escripts diff --git a/deps/rabbit/README.md b/deps/rabbit/README.md index d02991a1e8237ac0435a0744443ffede1967a3fe..6f5cdbea4d5161fe7b9eaae2bcf41577e91327ea 100644 --- a/deps/rabbit/README.md +++ b/deps/rabbit/README.md @@ -13,18 +13,23 @@ ## Installation * [Installation guides](https://rabbitmq.com/download.html) for various platforms + * [Changelog](https://www.rabbitmq.com/changelog.html) + * [Releases](https://github.com/rabbitmq/rabbitmq-server/releases) on GitHub * [Supported and unsupported series](https://www.rabbitmq.com/versions.html) * [Supported Erlang versions](https://www.rabbitmq.com/which-erlang.html) + ## Tutorials & Documentation * [RabbitMQ tutorials](https://rabbitmq.com/getstarted.html) * [All documentation guides](https://rabbitmq.com/documentation.html) - * [Documentation source](https://github.com/rabbitmq/rabbitmq-website/) + * [CLI tools guide](https://rabbitmq.com/cli.html) + * [Configuration guide](https://rabbitmq.com/configure.html) * [Client libraries and tools](https://rabbitmq.com/devtools.html) * [Monitoring guide](https://rabbitmq.com/monitoring.html) * [Production checklist](https://rabbitmq.com/production-checklist.html) * [Runnable tutorials](https://github.com/rabbitmq/rabbitmq-tutorials/) + * [Documentation source](https://github.com/rabbitmq/rabbitmq-website/) ## Getting Help diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/Makefile b/deps/rabbit/apps/rabbitmq_prelaunch/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..572f7703d47a2c3da9f585699797a5ce88810e38 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/Makefile @@ -0,0 +1,11 @@ +PROJECT = rabbitmq_prelaunch +PROJECT_DESCRIPTION = RabbitMQ prelaunch setup +PROJECT_VERSION = 1.0.0 +PROJECT_MOD = rabbit_prelaunch_app + +DEPS = rabbit_common lager + +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk + +include ../../rabbitmq-components.mk +include ../../erlang.mk diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl new file mode 100644 index 0000000000000000000000000000000000000000..9adcc92e0e7c3f21cec72623015eee3ccab447f7 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl @@ -0,0 +1,84 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2019-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state). + +-include_lib("eunit/include/eunit.hrl"). + +-export([get/0, + set/1, + wait_for/2]). + +-define(PT_KEY_BOOT_STATE, {?MODULE, boot_state}). + +-type boot_state() :: 'stopped' | 'booting' | 'ready' | 'stopping'. + +-export_type([boot_state/0]). + +-spec get() -> boot_state(). +get() -> + persistent_term:get(?PT_KEY_BOOT_STATE, stopped). + +-spec set(boot_state()) -> ok. +set(BootState) -> + rabbit_log_prelaunch:debug("Change boot state to `~s`", [BootState]), + ?assert(is_valid(BootState)), + case BootState of + stopped -> persistent_term:erase(?PT_KEY_BOOT_STATE); + _ -> persistent_term:put(?PT_KEY_BOOT_STATE, BootState) + end, + rabbit_boot_state_sup:notify_boot_state_listeners(BootState). + +-spec wait_for(boot_state(), timeout()) -> ok | {error, timeout}. +wait_for(BootState, infinity) -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, infinity) + end; +wait_for(BootState, Timeout) + when is_integer(Timeout) andalso Timeout >= 0 -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, Timeout - Wait) + end; +wait_for(_, _) -> + {error, timeout}. + +boot_state_idx(stopped) -> 0; +boot_state_idx(booting) -> 1; +boot_state_idx(ready) -> 2; +boot_state_idx(stopping) -> 3. + +is_valid(BootState) -> + is_integer(boot_state_idx(BootState)). + +is_reached(TargetBootState) -> + is_reached(?MODULE:get(), TargetBootState). + +is_reached(CurrentBootState, CurrentBootState) -> + true; +is_reached(stopping, stopped) -> + false; +is_reached(_CurrentBootState, stopped) -> + true; +is_reached(stopped, _TargetBootState) -> + true; +is_reached(CurrentBootState, TargetBootState) -> + boot_state_idx(TargetBootState) =< boot_state_idx(CurrentBootState). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..44f421e543a7b92f3535c086d1bce80abfdbe0e8 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl @@ -0,0 +1,46 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_sup). +-behaviour(supervisor). + +-export([start_link/0, + init/1]). + +-export([notify_boot_state_listeners/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + SystemdSpec = #{id => rabbit_boot_state_systemd, + start => {rabbit_boot_state_systemd, start_link, []}, + restart => transient}, + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, + [SystemdSpec]}}. + +-spec notify_boot_state_listeners(rabbit_boot_state:boot_state()) -> ok. +notify_boot_state_listeners(BootState) -> + lists:foreach( + fun + ({_, Child, _, _}) when is_pid(Child) -> + gen_server:cast(Child, {notify_boot_state, BootState}); + (_) -> + ok + end, + supervisor:which_children(?MODULE)). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl new file mode 100644 index 0000000000000000000000000000000000000000..7a942745e7c2b1e28d4647dc9de44d1ccc610cde --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2015-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_systemd). + +-behaviour(gen_server). + +-export([start_link/0]). + +-export([init/1, + handle_call/3, + handle_cast/2, + terminate/2, + code_change/3]). + +-record(state, {mechanism, + sd_notify_module, + socket}). + +-define(LOG_PREFIX, "Boot state/systemd: "). + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + case os:type() of + {unix, _} -> + case code:load_file(sd_notify) of + {module, sd_notify} -> + {ok, #state{mechanism = legacy, + sd_notify_module = sd_notify}}; + {error, _} -> + case os:getenv("NOTIFY_SOCKET") of + false -> + ignore; + "" -> + ignore; + Socket -> + {ok, #state{mechanism = socat, + socket = Socket}} + end + end; + _ -> + ignore + end. + +handle_call(_Request, _From, State) -> + {noreply, State}. + +handle_cast({notify_boot_state, BootState}, State) -> + notify_boot_state(BootState, State), + {noreply, State}. + +terminate(normal, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%% Private + +notify_boot_state(ready = BootState, + #state{mechanism = legacy, sd_notify_module = SDNotify}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via native module)", + [BootState]), + sd_notify_legacy(SDNotify); +notify_boot_state(ready = BootState, + #state{mechanism = socat, socket = Socket}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via socat(1))", + [BootState]), + sd_notify_socat(Socket); +notify_boot_state(BootState, _) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "ignoring state `~s`", + [BootState]), + ok. + +sd_notify_message() -> + "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". + +sd_notify_legacy(SDNotify) -> + SDNotify:sd_notify(0, sd_notify_message()). + +%% socat(1) is the most portable way the sd_notify could be +%% implemented in erlang, without introducing some NIF. Currently the +%% following issues prevent us from implementing it in a more +%% reasonable way: +%% - systemd-notify(1) is unstable for non-root users +%% - erlang doesn't support unix domain sockets. +%% +%% Some details on how we ended with such a solution: +%% https://github.com/rabbitmq/rabbitmq-server/issues/664 +sd_notify_socat(Socket) -> + case sd_current_unit() of + {ok, Unit} -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemd unit for activation check: \"~s\"~n", + [Unit]), + sd_notify_socat(Socket, Unit); + _ -> + ok + end. + +sd_notify_socat(Socket, Unit) -> + try sd_open_port(Socket) of + Port -> + Port ! {self(), {command, sd_notify_message()}}, + Result = sd_wait_activation(Port, Unit), + port_close(Port), + Result + catch + Class:Reason -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "Failed to start socat(1): ~p:~p~n", + [Class, Reason]), + false + end. + +sd_current_unit() -> + CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), + Ret = (catch re:run(CmdOut, + "([-.@0-9a-zA-Z]+)", + [unicode, {capture, all_but_first, list}])), + case Ret of + {'EXIT', _} -> error; + {match, [Unit]} -> {ok, Unit}; + _ -> error + end. + +socat_socket_arg("@" ++ AbstractUnixSocket) -> + "abstract-sendto:" ++ AbstractUnixSocket; +socat_socket_arg(UnixSocket) -> + "unix-sendto:" ++ UnixSocket. + +sd_open_port(Socket) -> + open_port( + {spawn_executable, os:find_executable("socat")}, + [{args, [socat_socket_arg(Socket), "STDIO"]}, + use_stdio, out]). + +sd_wait_activation(Port, Unit) -> + case os:find_executable("systemctl") of + false -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemctl(1) unavailable, falling back to sleep~n"), + timer:sleep(5000), + ok; + _ -> + sd_wait_activation(Port, Unit, 10) + end. + +sd_wait_activation(_, _, 0) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "service still in 'activating' state, bailing out~n"), + ok; +sd_wait_activation(Port, Unit, AttemptsLeft) -> + Ret = os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'"), + case Ret of + "ActiveState=activating\n" -> + timer:sleep(1000), + sd_wait_activation(Port, Unit, AttemptsLeft - 1); + "ActiveState=" ++ _ -> + ok; + _ = Err -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "unexpected status from systemd: ~p~n", [Err]), + ok + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl new file mode 100644 index 0000000000000000000000000000000000000000..ef15f47a750e4769ce515755960a464f6a67c8f8 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl @@ -0,0 +1,228 @@ +-module(rabbit_prelaunch). + +-include_lib("eunit/include/eunit.hrl"). + +-export([run_prelaunch_first_phase/0, + assert_mnesia_is_stopped/0, + get_context/0, + get_stop_reason/0, + set_stop_reason/1, + clear_stop_reason/0, + is_initial_pass/0, + initial_pass_finished/0, + shutdown_func/1]). + +-ifdef(TEST). +-export([store_context/1, + clear_context_cache/0]). +-endif. + +-define(PT_KEY_CONTEXT, {?MODULE, context}). +-define(PT_KEY_INITIAL_PASS, {?MODULE, initial_pass_finished}). +-define(PT_KEY_SHUTDOWN_FUNC, {?MODULE, chained_shutdown_func}). +-define(PT_KEY_STOP_REASON, {?MODULE, stop_reason}). + +run_prelaunch_first_phase() -> + try + do_run() + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error + end. + +do_run() -> + %% Indicate RabbitMQ is booting. + clear_stop_reason(), + rabbit_boot_state:set(booting), + + %% Configure dbg if requested. + rabbit_prelaunch_early_logging:enable_quick_dbg(rabbit_env:dbg_config()), + + %% Setup signal handler. + ok = rabbit_prelaunch_sighandler:setup(), + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. + %% + %% We need this because our cluster consistency check (in the second + %% phase) depends on Mnesia not being started before it has a chance + %% to run. + %% + %% Also, in the initial pass, we don't want Mnesia to run before + %% Erlang distribution is configured. + assert_mnesia_is_stopped(), + + %% Get informations to setup logging. + Context0 = rabbit_env:get_context_before_logging_init(), + ?assertMatch(#{}, Context0), + + %% Setup logging for the prelaunch phase. + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context0, true), + + IsInitialPass = is_initial_pass(), + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [1/2] (initial pass) =="), + rabbit_log_prelaunch:debug(""); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [1/2] =="), + rabbit_log_prelaunch:debug("") + end, + rabbit_env:log_process_env(), + + %% Load rabbitmq-env.conf, redo logging setup and continue. + Context1 = rabbit_env:get_context_after_logging_init(Context0), + ?assertMatch(#{}, Context1), + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context1, true), + rabbit_env:log_process_env(), + + %% Complete context now that we have the final environment loaded. + Context2 = rabbit_env:get_context_after_reloading_env(Context1), + ?assertMatch(#{}, Context2), + store_context(Context2), + rabbit_env:log_context(Context2), + ok = setup_shutdown_func(), + + Context = Context2#{initial_pass => IsInitialPass}, + + rabbit_env:context_to_code_path(Context), + rabbit_env:context_to_app_env_vars(Context), + + %% 1. Erlang/OTP compatibility check. + ok = rabbit_prelaunch_erlang_compat:check(Context), + + %% 2. Erlang distribution check + start. + ok = rabbit_prelaunch_dist:setup(Context), + + %% 3. Configuration check + loading. + ok = rabbit_prelaunch_conf:setup(Context), + + %% 4. Write PID file. + rabbit_log_prelaunch:debug(""), + _ = write_pid_file(Context), + ignore. + +assert_mnesia_is_stopped() -> + ?assertNot(lists:keymember(mnesia, 1, application:which_applications())). + +store_context(Context) when is_map(Context) -> + persistent_term:put(?PT_KEY_CONTEXT, Context). + +get_context() -> + case persistent_term:get(?PT_KEY_CONTEXT, undefined) of + undefined -> undefined; + Context -> Context#{initial_pass => is_initial_pass()} + end. + +-ifdef(TEST). +clear_context_cache() -> + persistent_term:erase(?PT_KEY_CONTEXT). +-endif. + +get_stop_reason() -> + persistent_term:get(?PT_KEY_STOP_REASON, undefined). + +set_stop_reason(Reason) -> + case get_stop_reason() of + undefined -> + rabbit_log_prelaunch:debug("Set stop reason to: ~p", [Reason]), + persistent_term:put(?PT_KEY_STOP_REASON, Reason); + _ -> + ok + end. + +clear_stop_reason() -> + persistent_term:erase(?PT_KEY_STOP_REASON). + +is_initial_pass() -> + not persistent_term:get(?PT_KEY_INITIAL_PASS, false). + +initial_pass_finished() -> + persistent_term:put(?PT_KEY_INITIAL_PASS, true). + +setup_shutdown_func() -> + ThisMod = ?MODULE, + ThisFunc = shutdown_func, + ExistingShutdownFunc = application:get_env(kernel, shutdown_func), + case ExistingShutdownFunc of + {ok, {ThisMod, ThisFunc}} -> + ok; + {ok, {ExistingMod, ExistingFunc}} -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1 " + "(chained with ~s:~s/1)", + [ThisMod, ThisFunc, ExistingMod, ExistingFunc]), + ok = persistent_term:put( + ?PT_KEY_SHUTDOWN_FUNC, + ExistingShutdownFunc), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc); + _ -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1", + [ThisMod, ThisFunc]), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc) + end. + +record_kernel_shutdown_func(Mod, Func) -> + application:set_env( + kernel, shutdown_func, {Mod, Func}, + [{persistent, true}]). + +shutdown_func(Reason) -> + rabbit_log_prelaunch:debug( + "Running ~s:shutdown_func() as part of `kernel` shutdown", [?MODULE]), + Context = get_context(), + remove_pid_file(Context), + ChainedShutdownFunc = persistent_term:get( + ?PT_KEY_SHUTDOWN_FUNC, + undefined), + case ChainedShutdownFunc of + {ChainedMod, ChainedFunc} -> ChainedMod:ChainedFunc(Reason); + _ -> ok + end. + +write_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Writing PID file: ~s", [PidFile]), + case filelib:ensure_dir(PidFile) of + ok -> + OSPid = os:getpid(), + case file:write_file(PidFile, OSPid) of + ok -> + ok; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to write PID file \"~s\": ~s", + [PidFile, file:format_error(Reason)]), + Error + end; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to create PID file \"~s\" directory: ~s", + [PidFile, file:format_error(Reason)]), + Error + end; +write_pid_file(_) -> + ok. + +remove_pid_file(#{pid_file := PidFile, keep_pid_file_on_exit := true}) -> + rabbit_log_prelaunch:debug("Keeping PID file: ~s", [PidFile]), + ok; +remove_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Deleting PID file: ~s", [PidFile]), + _ = file:delete(PidFile), + ok; +remove_pid_file(_) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl new file mode 100644 index 0000000000000000000000000000000000000000..cef7f05e772097ac61b341793bae523089151dac --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl @@ -0,0 +1,11 @@ +-module(rabbit_prelaunch_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + rabbit_prelaunch_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl new file mode 100644 index 0000000000000000000000000000000000000000..d2409f0d0bb671597cdd3a3d773c5f279bf02b09 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -0,0 +1,503 @@ +-module(rabbit_prelaunch_conf). + +-include_lib("kernel/include/file.hrl"). +-include_lib("stdlib/include/zip.hrl"). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1, + get_config_state/0, + generate_config_from_cuttlefish_files/3, + decrypt_config/1]). + +-ifdef(TEST). +-export([decrypt_config/2]). +-endif. + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Configuration =="), + + %% TODO: Check if directories/files are inside Mnesia dir. + + ok = set_default_config(), + + AdditionalConfigFiles = find_additional_config_files(Context), + AdvancedConfigFile = find_actual_advanced_config_file(Context), + State = case find_actual_main_config_file(Context) of + {MainConfigFile, erlang} -> + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + MainConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => MainConfigFile}; + {MainConfigFile, cuttlefish} -> + ConfigFiles = [MainConfigFile | AdditionalConfigFiles], + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdditionalConfigFiles =/= [] -> + ConfigFiles = AdditionalConfigFiles, + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdvancedConfigFile =/= undefined -> + rabbit_log_prelaunch:warning( + "Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s", + [AdvancedConfigFile]), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined -> + #{config_files => [], + config_advanced_file => undefined} + end, + ok = override_with_hard_coded_critical_config(), + ok = set_credentials_obfuscation_secret(), + rabbit_log_prelaunch:debug( + "Saving config state to application env: ~p", [State]), + store_config_state(State). + +store_config_state(ConfigState) -> + persistent_term:put({rabbitmq_prelaunch, config_state}, ConfigState). + +get_config_state() -> + persistent_term:get({rabbitmq_prelaunch, config_state}, undefined). + +%% ------------------------------------------------------------------- +%% Configuration loading. +%% ------------------------------------------------------------------- + +set_default_config() -> + rabbit_log_prelaunch:debug("Setting default config"), + Config = [ + {ra, + [ + {wal_max_size_bytes, 536870912}, %% 5 * 2 ^ 20 + {wal_max_batch_size, 4096} + ]}, + {sysmon_handler, + [{process_limit, 100}, + {port_limit, 100}, + {gc_ms_limit, 0}, + {schedule_ms_limit, 0}, + {heap_word_limit, 0}, + {busy_port, false}, + {busy_dist_port, true}]} + ], + apply_erlang_term_based_config(Config). + +find_actual_main_config_file(#{main_config_file := File}) -> + case filelib:is_regular(File) of + true -> + Format = case filename:extension(File) of + ".conf" -> cuttlefish; + ".config" -> erlang; + _ -> determine_config_format(File) + end, + {File, Format}; + false -> + OldFormatFile = File ++ ".config", + NewFormatFile = File ++ ".conf", + case filelib:is_regular(OldFormatFile) of + true -> + case filelib:is_regular(NewFormatFile) of + true -> + rabbit_log_prelaunch:warning( + "Both old (.config) and new (.conf) format config " + "files exist."), + rabbit_log_prelaunch:warning( + "Using the old format config file: ~s", + [OldFormatFile]), + rabbit_log_prelaunch:warning( + "Please update your config files to the new format " + "and remove the old file."), + ok; + false -> + ok + end, + {OldFormatFile, erlang}; + false -> + case filelib:is_regular(NewFormatFile) of + true -> {NewFormatFile, cuttlefish}; + false -> undefined + end + end + end. + +find_additional_config_files(#{additional_config_files := Pattern}) + when Pattern =/= undefined -> + Pattern1 = case filelib:is_dir(Pattern) of + true -> filename:join(Pattern, "*"); + false -> Pattern + end, + OnlyFiles = [File || + File <- filelib:wildcard(Pattern1), + filelib:is_regular(File)], + lists:sort(OnlyFiles); +find_additional_config_files(_) -> + []. + +find_actual_advanced_config_file(#{advanced_config_file := File}) -> + case filelib:is_regular(File) of + true -> File; + false -> undefined + end. + +determine_config_format(File) -> + case filelib:file_size(File) of + 0 -> + cuttlefish; + _ -> + case file:consult(File) of + {ok, _} -> erlang; + _ -> cuttlefish + end + end. + +load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile) -> + Config = generate_config_from_cuttlefish_files( + Context, ConfigFiles, AdvancedConfigFile), + apply_erlang_term_based_config(Config), + Config. + +generate_config_from_cuttlefish_files(Context, + ConfigFiles, + AdvancedConfigFile) -> + %% Load schemas. + SchemaFiles = find_cuttlefish_schemas(Context), + case SchemaFiles of + [] -> + rabbit_log_prelaunch:error( + "No configuration schema found~n", []), + throw({error, no_configuration_schema_found}); + _ -> + rabbit_log_prelaunch:debug( + "Configuration schemas found:~n", []), + lists:foreach( + fun(SchemaFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [SchemaFile]) + end, + SchemaFiles), + ok + end, + Schema = cuttlefish_schema:files(SchemaFiles), + + %% Load configuration. + rabbit_log_prelaunch:debug( + "Loading configuration files (Cuttlefish based):"), + lists:foreach( + fun(ConfigFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [ConfigFile]) + end, ConfigFiles), + case cuttlefish_conf:files(ConfigFiles) of + {errorlist, Errors} -> + rabbit_log_prelaunch:error("Error parsing configuration:"), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)]) + end, Errors), + rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"), + throw({error, failed_to_parse_configuration_file}); + Config0 -> + %% Finalize configuration, based on the schema. + Config = case cuttlefish_generator:map(Schema, Config0) of + {error, Phase, {errorlist, Errors}} -> + %% TODO + rabbit_log_prelaunch:error( + "Error preparing configuration in phase ~ts:", + [Phase]), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error( + " - ~ts", + [cuttlefish_error:xlate(Error)]) + end, Errors), + throw( + {error, failed_to_prepare_configuration}); + ValidConfig -> + proplists:delete(vm_args, ValidConfig) + end, + + %% Apply advanced configuration overrides, if any. + override_with_advanced_config(Config, AdvancedConfigFile) + end. + +find_cuttlefish_schemas(Context) -> + Apps = list_apps(Context), + rabbit_log_prelaunch:debug( + "Looking up configuration schemas in the following applications:"), + find_cuttlefish_schemas(Apps, []). + +find_cuttlefish_schemas([App | Rest], AllSchemas) -> + Schemas = list_schemas_in_app(App), + find_cuttlefish_schemas(Rest, AllSchemas ++ Schemas); +find_cuttlefish_schemas([], AllSchemas) -> + lists:sort(fun(A,B) -> A < B end, AllSchemas). + +list_apps(#{os_type := {win32, _}, plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ";"), + list_apps1(PluginsDirs, []); +list_apps(#{plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ":"), + list_apps1(PluginsDirs, []). + + +list_apps1([Dir | Rest], Apps) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + NewApps = [list_to_atom( + hd( + string:split(filename:basename(F, ".ex"), "-"))) + || F <- Filenames], + Apps1 = lists:umerge(Apps, lists:sort(NewApps)), + list_apps1(Rest, Apps1); + {error, Reason} -> + rabbit_log_prelaunch:debug( + "Failed to list directory \"~ts\" content: ~ts", + [Dir, file:format_error(Reason)]), + list_apps1(Rest, Apps) + end; +list_apps1([], AppInfos) -> + AppInfos. + +list_schemas_in_app(App) -> + {Loaded, Unload} = case application:load(App) of + ok -> {true, true}; + {error, {already_loaded, _}} -> {true, false}; + {error, _} -> {false, false} + end, + List = case Loaded of + true -> + case code:priv_dir(App) of + {error, bad_name} -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable priv dir)", [App]), + []; + PrivDir -> + SchemaDir = filename:join([PrivDir, "schema"]), + do_list_schemas_in_app(App, SchemaDir) + end; + false -> + rabbit_log_prelaunch:debug( + " [ ] ~s (failed to load application)", [App]), + [] + end, + case Unload of + true -> _ = application:unload(App), + ok; + false -> ok + end, + List. + +do_list_schemas_in_app(App, SchemaDir) -> + case erl_prim_loader:list_dir(SchemaDir) of + {ok, Files} -> + rabbit_log_prelaunch:debug(" [x] ~s", [App]), + [filename:join(SchemaDir, File) + || [C | _] = File <- Files, + C =/= $.]; + error -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable schema dir)", [App]), + [] + end. + +override_with_advanced_config(Config, undefined) -> + Config; +override_with_advanced_config(Config, AdvancedConfigFile) -> + rabbit_log_prelaunch:debug( + "Override with advanced configuration file \"~ts\"", + [AdvancedConfigFile]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(Config, AdvancedConfig); + {ok, OtherTerms} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\", " + "incorrect format: ~p", + [AdvancedConfigFile, OtherTerms]), + throw({error, failed_to_parse_advanced_configuration_file}); + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\": ~ts", + [AdvancedConfigFile, file:format_error(Reason)]), + throw({error, failed_to_read_advanced_configuration_file}) + end. + +override_with_hard_coded_critical_config() -> + rabbit_log_prelaunch:debug("Override with hard-coded critical config"), + Config = [ + {ra, + %% Make Ra use a custom logger that dispatches to lager + %% instead of the default OTP logger + [{logger_module, rabbit_log_ra_shim}]} + ], + apply_erlang_term_based_config(Config). + +apply_erlang_term_based_config([{_, []} | Rest]) -> + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([{App, Vars} | Rest]) -> + rabbit_log_prelaunch:debug(" Applying configuration for '~s':", [App]), + ok = apply_app_env_vars(App, Vars), + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([]) -> + ok. + +apply_app_env_vars(App, [{Var, Value} | Rest]) -> + rabbit_log_prelaunch:debug( + " - ~s = ~p", + [Var, Value]), + ok = application:set_env(App, Var, Value, [{persistent, true}]), + apply_app_env_vars(App, Rest); +apply_app_env_vars(_, []) -> + ok. + +set_credentials_obfuscation_secret() -> + rabbit_log_prelaunch:debug("Refreshing credentials obfuscation configuration from env: ~p", + [application:get_all_env(credentials_obfuscation)]), + ok = credentials_obfuscation:refresh_config(), + CookieBin = rabbit_data_coercion:to_binary(erlang:get_cookie()), + rabbit_log_prelaunch:debug( + "Setting credentials obfuscation secret to '~s'", [CookieBin]), + ok = credentials_obfuscation:set_secret(CookieBin). + +%% ------------------------------------------------------------------- +%% Config decryption. +%% ------------------------------------------------------------------- + +decrypt_config(Apps) -> + rabbit_log_prelaunch:debug("Decoding encrypted config values (if any)"), + ConfigEntryDecoder = application:get_env(rabbit, config_entry_decoder, []), + decrypt_config(Apps, ConfigEntryDecoder). + +decrypt_config([], _) -> + ok; +decrypt_config([App | Apps], Algo) -> + Algo1 = decrypt_app(App, application:get_all_env(App), Algo), + decrypt_config(Apps, Algo1). + +decrypt_app(_, [], Algo) -> + Algo; +decrypt_app(App, [{Key, Value} | Tail], Algo) -> + Algo2 = try + case decrypt(Value, Algo) of + {Value, Algo1} -> + Algo1; + {NewValue, Algo1} -> + rabbit_log_prelaunch:debug( + "Value of `~s` decrypted", [Key]), + ok = application:set_env(App, Key, NewValue, + [{persistent, true}]), + Algo1 + end + catch + throw:{bad_config_entry_decoder, _} = Error -> + throw(Error); + _:Msg -> + throw({config_decryption_error, {key, Key}, Msg}) + end, + decrypt_app(App, Tail, Algo2). + +decrypt({encrypted, _}=EncValue, {Cipher, Hash, Iterations, PassPhrase} = Algo) -> + {rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, EncValue), Algo}; +decrypt({encrypted, _}=EncValue, + ConfigEntryDecoder) + when is_list(ConfigEntryDecoder) -> + Algo = config_entry_decoder_to_algo(ConfigEntryDecoder), + decrypt(EncValue, Algo); +decrypt(List, Algo) when is_list(List) -> + decrypt_list(List, Algo, []); +decrypt(Value, Algo) -> + {Value, Algo}. + +%% We make no distinction between strings and other lists. +%% When we receive a string, we loop through each element +%% and ultimately return the string unmodified, as intended. +decrypt_list([], Algo, Acc) -> + {lists:reverse(Acc), Algo}; +decrypt_list([{Key, Value} | Tail], Algo, Acc) + when Key =/= encrypted -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [{Key, Value1} | Acc]); +decrypt_list([Value | Tail], Algo, Acc) -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [Value1 | Acc]). + +config_entry_decoder_to_algo(ConfigEntryDecoder) -> + case get_passphrase(ConfigEntryDecoder) of + undefined -> + throw({bad_config_entry_decoder, missing_passphrase}); + PassPhrase -> + { + proplists:get_value( + cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), + proplists:get_value( + hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), + proplists:get_value( + iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), + PassPhrase + } + end. + +get_passphrase(ConfigEntryDecoder) -> + rabbit_log_prelaunch:debug("Getting encrypted config passphrase"), + case proplists:get_value(passphrase, ConfigEntryDecoder) of + prompt -> + IoDevice = get_input_iodevice(), + ok = io:setopts(IoDevice, [{echo, false}]), + PP = lists:droplast(io:get_line(IoDevice, + "\nPlease enter the passphrase to unlock encrypted " + "configuration entries.\n\nPassphrase: ")), + ok = io:setopts(IoDevice, [{echo, true}]), + io:format(IoDevice, "~n", []), + PP; + {file, Filename} -> + {ok, File} = file:read_file(Filename), + [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), + PP; + PP -> + PP + end. + +%% This function retrieves the correct IoDevice for requesting +%% input. The problem with using the default IoDevice is that +%% the Erlang shell prevents us from getting the input. +%% +%% Instead we therefore look for the io process used by the +%% shell and if it can't be found (because the shell is not +%% started e.g with -noshell) we use the 'user' process. +%% +%% This function will not work when either -oldshell or -noinput +%% options are passed to erl. +get_input_iodevice() -> + case whereis(user) of + undefined -> + user; + User -> + case group:interfaces(User) of + [] -> + user; + [{user_drv, Drv}] -> + case user_drv:interfaces(Drv) of + [] -> user; + [{current_group, IoDevice}] -> IoDevice + end + end + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl new file mode 100644 index 0000000000000000000000000000000000000000..3d718438a7379b71e47f5a343781f64e4fbd0703 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl @@ -0,0 +1,104 @@ +-module(rabbit_prelaunch_dist). + +-export([setup/1]). + +setup(#{nodename := Node, nodename_type := NameType} = Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang distribution =="), + rabbit_log_prelaunch:debug("Rqeuested node name: ~s (type: ~s)", + [Node, NameType]), + case node() of + nonode@nohost -> + ok = rabbit_nodes_common:ensure_epmd(), + ok = dist_port_range_check(Context), + ok = dist_port_use_check(Context), + ok = duplicate_node_check(Context), + + ok = do_setup(Context); + Node -> + rabbit_log_prelaunch:debug( + "Erlang distribution already running", []), + ok; + Unexpected -> + throw({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) + end, + ok. + +do_setup(#{nodename := Node, nodename_type := NameType}) -> + rabbit_log_prelaunch:debug("Starting Erlang distribution", []), + case application:get_env(kernel, net_ticktime) of + {ok, Ticktime} when is_integer(Ticktime) andalso Ticktime >= 1 -> + %% The value passed to net_kernel:start/1 is the + %% "minimum transition traffic interval" as defined in + %% net_kernel:set_net_ticktime/1. + MTTI = Ticktime * 1000 div 4, + {ok, _} = net_kernel:start([Node, NameType, MTTI]), + ok; + _ -> + {ok, _} = net_kernel:start([Node, NameType]), + ok + end, + ok. + +%% Check whether a node with the same name is already running +duplicate_node_check(#{split_nodename := {NodeName, NodeHost}}) -> + rabbit_log_prelaunch:debug( + "Checking if node name ~s is already used", [NodeName]), + PrelaunchName = rabbit_nodes_common:make( + {NodeName ++ "_prelaunch_" ++ os:getpid(), + "localhost"}), + {ok, _} = net_kernel:start([PrelaunchName, shortnames]), + case rabbit_nodes_common:names(NodeHost) of + {ok, NamePorts} -> + case proplists:is_defined(NodeName, NamePorts) of + true -> + throw({error, {duplicate_node_name, NodeName, NodeHost}}); + false -> + ok = net_kernel:stop(), + ok + end; + {error, EpmdReason} -> + throw({error, {epmd_error, NodeHost, EpmdReason}}) + end. + +dist_port_range_check(#{erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is valid", [DistTcpPort]), + case DistTcpPort of + _ when DistTcpPort < 1 orelse DistTcpPort > 65535 -> + throw({error, {invalid_dist_port_range, DistTcpPort}}); + _ -> + ok + end. + +dist_port_use_check(#{split_nodename := {_, NodeHost}, + erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is available", [DistTcpPort]), + dist_port_use_check_ipv4(NodeHost, DistTcpPort). + +dist_port_use_check_ipv4(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +dist_port_use_check_ipv6(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +-spec dist_port_use_check_fail(non_neg_integer(), string()) -> + no_return(). + +dist_port_use_check_fail(Port, Host) -> + {ok, Names} = rabbit_nodes_common:names(Host), + case [N || {N, P} <- Names, P =:= Port] of + [] -> + throw({error, {dist_port_already_used, Port, not_erlang, Host}}); + [Name] -> + throw({error, {dist_port_already_used, Port, Name, Host}}) + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl new file mode 100644 index 0000000000000000000000000000000000000000..431422276fe50e22c72c11aeb48cec5ba06362ea --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl @@ -0,0 +1,109 @@ +-module(rabbit_prelaunch_early_logging). + +-include_lib("rabbit_common/include/rabbit_log.hrl"). + +-export([setup_early_logging/2, + enable_quick_dbg/1, + use_colored_logging/0, + use_colored_logging/1, + list_expected_sinks/0]). + +setup_early_logging(#{log_levels := undefined} = Context, + LagerEventToStdout) -> + setup_early_logging(Context#{log_levels => get_default_log_level()}, + LagerEventToStdout); +setup_early_logging(Context, LagerEventToStdout) -> + Configured = lists:member( + lager_util:make_internal_sink_name(rabbit_log_prelaunch), + lager:list_all_sinks()), + case Configured of + true -> ok; + false -> do_setup_early_logging(Context, LagerEventToStdout) + end. + +get_default_log_level() -> + #{"prelaunch" => warning}. + +do_setup_early_logging(#{log_levels := LogLevels} = Context, + LagerEventToStdout) -> + Colored = use_colored_logging(Context), + application:set_env(lager, colored, Colored), + ConsoleBackend = lager_console_backend, + case LagerEventToStdout of + true -> + GLogLevel = case LogLevels of + #{global := Level} -> Level; + _ -> warning + end, + _ = lager_app:start_handler( + lager_event, ConsoleBackend, [{level, GLogLevel}]), + ok; + false -> + ok + end, + lists:foreach( + fun(Sink) -> + CLogLevel = get_log_level(LogLevels, Sink), + lager_app:configure_sink( + Sink, + [{handlers, [{ConsoleBackend, [{level, CLogLevel}]}]}]) + end, list_expected_sinks()), + ok. + +use_colored_logging() -> + use_colored_logging(rabbit_prelaunch:get_context()). + +use_colored_logging(#{log_levels := #{color := true}, + output_supports_colors := true}) -> + true; +use_colored_logging(_) -> + false. + +list_expected_sinks() -> + Key = {?MODULE, lager_extra_sinks}, + case persistent_term:get(Key, undefined) of + undefined -> + CompileOptions = proplists:get_value(options, + module_info(compile), + []), + AutoList = [lager_util:make_internal_sink_name(M) + || M <- proplists:get_value(lager_extra_sinks, + CompileOptions, [])], + List = case lists:member(?LAGER_SINK, AutoList) of + true -> AutoList; + false -> [?LAGER_SINK | AutoList] + end, + %% Store the list in the application environment. If this + %% module is later cover-compiled, the compile option will + %% be lost, so we will be able to retrieve the list from the + %% application environment. + persistent_term:put(Key, List), + List; + List -> + List + end. + +sink_to_category(Sink) when is_atom(Sink) -> + re:replace( + atom_to_list(Sink), + "^rabbit_log_(.+)_lager_event$", + "\\1", + [{return, list}]). + +get_log_level(LogLevels, Sink) -> + Category = sink_to_category(Sink), + case LogLevels of + #{Category := Level} -> Level; + #{global := Level} -> Level; + _ -> warning + end. + +enable_quick_dbg(#{dbg_output := Output, dbg_mods := Mods}) -> + case Output of + stdout -> {ok, _} = dbg:tracer(), + ok; + _ -> {ok, _} = dbg:tracer(port, dbg:trace_port(file, Output)), + ok + end, + {ok, _} = dbg:p(all, c), + lists:foreach(fun(M) -> {ok, _} = dbg:tp(M, cx) end, Mods). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl new file mode 100644 index 0000000000000000000000000000000000000000..1e8fe2690de077c6dad71e029937a442317a3dd0 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl @@ -0,0 +1,47 @@ +-module(rabbit_prelaunch_erlang_compat). + +-export([check/1]). + +-define(OTP_MINIMUM, "21.3"). +-define(ERTS_MINIMUM, "10.3"). + +check(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang/OTP compatibility check =="), + + ERTSVer = erlang:system_info(version), + OTPRel = rabbit_misc:otp_release(), + rabbit_log_prelaunch:debug( + "Requiring: Erlang/OTP ~s (ERTS ~s)", [?OTP_MINIMUM, ?ERTS_MINIMUM]), + rabbit_log_prelaunch:debug( + "Running: Erlang/OTP ~s (ERTS ~s)", [OTPRel, ERTSVer]), + + case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of + true when ?ERTS_MINIMUM =/= ERTSVer -> + rabbit_log_prelaunch:debug( + "Erlang/OTP version requirement satisfied"), + ok; + true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> + %% When a critical regression or bug is found, a new OTP + %% release can be published without changing the ERTS + %% version. For instance, this is the case with R16B03 and + %% R16B03-1. + %% + %% In this case, we compare the release versions + %% alphabetically. + ok; + _ -> + Msg = + "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " + "minimum required version is ~s (erts ~s)", + Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], + rabbit_log_prelaunch:error(Msg, Args), + + %% Also print to stderr to make this more visible + io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), + + Msg2 = rabbit_misc:format( + "Erlang ~s or later is required, started on ~s", + [?OTP_MINIMUM, OTPRel]), + throw({error, {erlang_version_too_old, Msg2}}) + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl new file mode 100644 index 0000000000000000000000000000000000000000..2a2eb2b7fdc860ef75dfba88db1d4879d64ee807 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl @@ -0,0 +1,112 @@ +-module(rabbit_prelaunch_errors). + +-export([format_error/1, + format_exception/3, + log_error/1, + log_exception/3]). + +-define(BOOT_FAILED_HEADER, + "\n" + "BOOT FAILED\n" + "===========\n"). + +-define(BOOT_FAILED_FOOTER, + "\n"). + +log_error(Error) -> + Message = format_error(Error), + log_message(Message). + +format_error({error, {duplicate_node_name, NodeName, NodeHost}}) -> + rabbit_misc:format( + "ERROR: node with name ~p already running on ~p", + [NodeName, NodeHost]); +format_error({error, {epmd_error, NodeHost, EpmdReason}}) -> + rabbit_misc:format( + "ERROR: epmd error for host ~s: ~s", + [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]); +format_error({error, {invalid_dist_port_range, DistTcpPort}}) -> + rabbit_misc:format( + "Invalid Erlang distribution TCP port: ~b", [DistTcpPort]); +format_error({error, {dist_port_already_used, Port, not_erlang, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use on ~s " + "(by non-Erlang process?)", [Port, Host]); +format_error({error, {dist_port_already_used, Port, Name, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use by ~s@~s", [Port, Name, Host]); +format_error({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) -> + rabbit_misc:format( + "Erlang distribution running with another node name (~s) " + "than the configured one (~s)", + [Unexpected, Node]); +format_error({bad_config_entry_decoder, missing_passphrase}) -> + rabbit_misc:format( + "Missing passphrase or missing passphrase read method in " + "`config_entry_decoder`", []); +format_error({config_decryption_error, {key, Key}, _Msg}) -> + rabbit_misc:format( + "Error while decrypting key '~p'. Please check encrypted value, " + "passphrase, and encryption configuration~n", + [Key]); +format_error({error, {timeout_waiting_for_tables, AllNodes, _}}) -> + Suffix = + "~nBACKGROUND~n==========~n~n" + "This cluster node was shut down while other nodes were still running.~n" + "To avoid losing data, you should start the other nodes first, then~n" + "start this one. To force this node to start, first invoke~n" + "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" + "cluster nodes after this one was shut down may be lost.", + {Message, Nodes} = + case AllNodes -- [node()] of + [] -> {rabbit_misc:format( + "Timeout contacting cluster nodes. Since RabbitMQ was" + " shut down forcefully~nit cannot determine which nodes" + " are timing out.~n" ++ Suffix, []), + []}; + Ns -> {rabbit_misc:format( + "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, + [Ns]), + Ns} + end, + Message ++ "\n" ++ rabbit_nodes_common:diagnostics(Nodes); +format_error({error, {cannot_log_to_file, unknown, Reason}}) -> + rabbit_misc:format( + "failed to initialised logger: ~p~n", + [Reason]); +format_error({error, {cannot_log_to_file, LogFile, + {cannot_create_parent_dirs, _, Reason}}}) -> + rabbit_misc:format( + "failed to create parent directory for log file at '~s', reason: ~s~n", + [LogFile, file:format_error(Reason)]); +format_error({error, {cannot_log_to_file, LogFile, Reason}}) -> + rabbit_misc:format( + "failed to open log file at '~s', reason: ~s", + [LogFile, file:format_error(Reason)]); +format_error(Error) -> + rabbit_misc:format("Error during startup: ~p", [Error]). + +log_exception(Class, Exception, Stacktrace) -> + Message = format_exception(Class, Exception, Stacktrace), + log_message(Message). + +format_exception(Class, Exception, Stacktrace) -> + rabbit_misc:format( + "Exception during startup:~n~s", + [lager:pr_stacktrace(Stacktrace, {Class, Exception})]). + +log_message(Message) -> + Lines = string:split( + ?BOOT_FAILED_HEADER ++ + Message ++ + ?BOOT_FAILED_FOOTER, + [$\n], + all), + lists:foreach( + fun(Line) -> + rabbit_log_prelaunch:error("~s", [Line]), + io:format(standard_error, "~s~n", [Line]) + end, Lines), + timer:sleep(1000), + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl new file mode 100644 index 0000000000000000000000000000000000000000..f9a60effda02cec9efdc0b3c1c7edf57d8dd85bf --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl @@ -0,0 +1,93 @@ +-module(rabbit_prelaunch_sighandler). +-behaviour(gen_event). + +-export([setup/0, + init/1, + handle_event/2, + handle_call/2, + handle_info/2, + terminate/2, + code_change/3]). + +%% CAUTION: Signal handling in this module must be kept consistent +%% with the same handling in rabbitmq-server(8). + +%% #{signal => default | ignore | stop}. +-define(SIGNALS_HANDLED_BY_US, + #{ + %% SIGHUP is often used to reload the configuration or reopen + %% log files after they were rotated. We don't support any + %% of those two cases, so ignore it for now, until we can do + %% something about it. + sighup => ignore, + + %% SIGTSTP is triggered by Ctrl+Z to pause a program. However + %% we can't handle SIGCONT, the signal used to resume the + %% program. Unfortunately, it makes a SIGTSTP handler less + %% useful here. + sigtstp => ignore + }). + +-define(SIGNAL_HANDLED_BY_ERLANG(Signal), + Signal =:= sigusr1 orelse + Signal =:= sigquit orelse + Signal =:= sigterm). + +-define(SERVER, erl_signal_server). + +setup() -> + case os:type() of + {unix, _} -> + case whereis(?SERVER) of + undefined -> + ok; + _ -> + case lists:member(?MODULE, gen_event:which_handlers(?SERVER)) of + true -> ok; + false -> gen_event:add_handler(?SERVER, ?MODULE, []) + end + end; + _ -> + ok + end. + +init(_Args) -> + maps:fold( + fun + (Signal, _, Ret) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> Ret; + (Signal, default, ok) -> os:set_signal(Signal, default); + (Signal, ignore, ok) -> os:set_signal(Signal, ignore); + (Signal, _, ok) -> os:set_signal(Signal, handle) + end, ok, ?SIGNALS_HANDLED_BY_US), + {ok, #{}}. + +handle_event(Signal, State) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> + {ok, State}; +handle_event(Signal, State) -> + case ?SIGNALS_HANDLED_BY_US of + %% The code below can be uncommented if we introduce a signal + %% which should stop RabbitMQ. + % + %#{Signal := stop} -> + % error_logger:info_msg( + % "~s received - shutting down~n", + % [string:uppercase(atom_to_list(Signal))]), + % ok = init:stop(); + _ -> + error_logger:info_msg( + "~s received - unhandled signal~n", + [string:uppercase(atom_to_list(Signal))]) + end, + {ok, State}. + +handle_info(_, State) -> + {ok, State}. + +handle_call(_, State) -> + {ok, ok, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Args, _State) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..9fd117d9f3aa939e21c33d1c412adb765f2fd122 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_sup). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + BootStateSup = #{id => bootstate, + start => {rabbit_boot_state_sup, start_link, []}, + type => supervisor}, + %% `rabbit_prelaunch` does not start a process, it only configures + %% the node. + Prelaunch = #{id => prelaunch, + start => {rabbit_prelaunch, run_prelaunch_first_phase, []}, + restart => transient}, + Procs = [BootStateSup, Prelaunch], + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, Procs}}. diff --git a/deps/rabbit/check_xref b/deps/rabbit/check_xref deleted file mode 100755 index 9eee5bb65d9d77ef6ce97514b6ce0de0c4771d89..0000000000000000000000000000000000000000 --- a/deps/rabbit/check_xref +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/env escript -%% -*- erlang -*- --mode(compile). - -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License -%% at https://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and -%% limitations under the License. -%% -%% The Original Code is RabbitMQ. -%% -%% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2010-2019 Pivotal Software, Inc. All rights reserved. -%% - -main(["-h"]) -> - io:format("usage: check_xref PluginDirectory (options)~n" - "options:~n" - " -q - quiet mode (only prints errors)~n" - " -X - disables all filters~n"); -main([PluginsDir|Argv]) -> - put({?MODULE, quiet}, lists:member("-q", Argv)), - put({?MODULE, no_filters}, lists:member("-X", Argv)), - - {ok, Cwd} = file:get_cwd(), - code:add_pathz(filename:join(Cwd, "ebin")), - LibDir = filename:join(Cwd, "lib"), - case filelib:is_dir(LibDir) of - false -> ok; - true -> os:cmd("rm -rf " ++ LibDir) - end, - Rc = try - check(Cwd, PluginsDir, LibDir, checks()) - catch - _:Err -> - io:format(user, "failed: ~p~n", [Err]), - 1 - end, - shutdown(Rc, LibDir). - -shutdown(Rc, LibDir) -> - os:cmd("rm -rf " ++ LibDir), - erlang:halt(Rc). - -check(Cwd, PluginsDir, LibDir, Checks) -> - {ok, Plugins} = file:list_dir(PluginsDir), - ok = file:make_dir(LibDir), - put({?MODULE, third_party}, []), - [begin - Source = filename:join(PluginsDir, Plugin), - Target = filename:join(LibDir, Plugin), - IsExternal = external_dependency(Plugin), - AppN = case IsExternal of - true -> filename:join(LibDir, unmangle_name(Plugin)); - false -> filename:join( - LibDir, filename:basename(Plugin, ".ez")) - end, - - report(info, "mkdir -p ~s~n", [Target]), - filelib:ensure_dir(Target), - - report(info, "cp ~s ~s~n", [Source, Target]), - {ok, _} = file:copy(Source, Target), - - report(info, "unzip -d ~s ~s~n", [LibDir, Target]), - {ok, _} = zip:unzip(Target, [{cwd, LibDir}]), - - UnpackDir = filename:join(LibDir, filename:basename(Target, ".ez")), - report(info, "mv ~s ~s~n", [UnpackDir, AppN]), - ok = file:rename(UnpackDir, AppN), - - code:add_patha(filename:join(AppN, "ebin")), - case IsExternal of - true -> App = list_to_atom(hd(string:tokens(filename:basename(AppN), - "-"))), - report(info, "loading ~p~n", [App]), - application:load(App), - store_third_party(App); - _ -> ok - end - end || Plugin <- Plugins, - lists:suffix(".ez", Plugin)], - - RabbitAppEbin = filename:join([LibDir, "rabbit", "ebin"]), - filelib:ensure_dir(filename:join(RabbitAppEbin, "foo")), - {ok, Beams} = file:list_dir("ebin"), - [{ok, _} = file:copy(filename:join("ebin", Beam), - filename:join(RabbitAppEbin, Beam)) || Beam <- Beams], - xref:start(?MODULE), - xref:set_default(?MODULE, [{verbose, false}, {warnings, false}]), - xref:set_library_path(?MODULE, code:get_path()), - xref:add_release(?MODULE, Cwd, {name, rabbit}), - store_unresolved_calls(), - Results = lists:flatten([perform_analysis(Q) || Q <- Checks]), - report(Results). - -%% -%% Analysis -%% - -perform_analysis({Query, Description, Severity}) -> - perform_analysis({Query, Description, Severity, fun(_) -> false end}); -perform_analysis({Query, Description, Severity, Filter}) -> - report_progress("Checking whether any code ~s " - "(~s)~n", [Description, Query]), - case analyse(Query) of - {ok, Analysis} -> - [filter(Result, Filter) || - Result <- process_analysis(Query, Description, - Severity, Analysis)]; - {error, Module, Reason} -> - {analysis_error, {Module, Reason}} - end. - -partition(Results) -> - lists:partition(fun({{_, L}, _}) -> L =:= error end, Results). - -analyse(Query) when is_atom(Query) -> - xref:analyse(?MODULE, Query, [{verbose, false}]); -analyse(Query) when is_list(Query) -> - xref:q(?MODULE, Query). - -process_analysis(Query, Tag, Severity, Analysis) when is_atom(Query) -> - [{{Tag, Severity}, MFA} || MFA <- Analysis]; -process_analysis(Query, Tag, Severity, Analysis) when is_list(Query) -> - [{{Tag, Severity}, Result} || Result <- Analysis]. - -checks() -> - [{"(XXL)(Lin) ((XC - UC) || (XU - X - B))", - "has call to undefined function(s)", - error, filters()}, - {"(Lin) (L - LU)", - "has unused local function(s)", - error, filters()}, - {"(E | \"(rabbit|amqp).*\":_/_ || \"gen_server2?\":call/2)", - "has 5 sec timeout in", - error, filters()}, - {"(Lin) (LU * (X - XU))", - "has exported function(s) only used locally", - warning, filters()}, - {"(Lin) (DF * (XU + LU))", "used deprecated function(s)", - warning, filters()}]. -%% {"(Lin) (X - XU)", "possibly unused export", -%% warning, fun filter_unused/1}]. - -%% -%% noise filters (can be disabled with -X) - strip uninteresting analyses -%% - -filter(Result, Filter) -> - case Filter(Result) of - false -> Result; - true -> [] %% NB: this gets flattened out later on.... - end. - -filters() -> - case get({?MODULE, no_filters}) of - true -> fun(_) -> false end; - _ -> filter_chain([fun is_unresolved_call/1, fun is_callback/1, - fun is_unused/1, fun is_irrelevant/1]) - end. - -filter_chain(FnChain) -> - fun(AnalysisResult) -> - Result = cleanup(AnalysisResult), - lists:foldl(fun(F, false) -> F(Result); - (_F, true) -> true - end, false, FnChain) - end. - -cleanup({{_, _},{{{{_,_,_}=MFA1,_},{{_,_,_}=MFA2,_}},_}}) -> {MFA1, MFA2}; -cleanup({{_, _},{{{_,_,_}=MFA1,_},{{_,_,_}=MFA2,_}}}) -> {MFA1, MFA2}; -cleanup({{_, _},{{_,_,_}=MFA1,{_,_,_}=MFA2},_}) -> {MFA1, MFA2}; -cleanup({{_, _},{{_,_,_}=MFA1,{_,_,_}=MFA2}}) -> {MFA1, MFA2}; -cleanup({{_, _}, {_,_,_}=MFA}) -> MFA; -cleanup({{_, _}, {{_,_,_}=MFA,_}}) -> MFA; -cleanup({{_,_,_}=MFA, {_,_,_}}) -> MFA; -cleanup({{_,_,_}=MFA, {_,_,_},_}) -> MFA; -cleanup(Other) -> Other. - -is_irrelevant({{M,_,_}, {_,_,_}}) -> - is_irrelevant(M); -is_irrelevant({M,_,_}) -> - is_irrelevant(M); -is_irrelevant(Mod) when is_atom(Mod) -> - lists:member(Mod, get({?MODULE, third_party})). - -is_unused({{_,_,_}=MFA, {_,_,_}}) -> - is_unused(MFA); -is_unused({M,_F,_A}) -> - lists:suffix("_tests", atom_to_list(M)); -is_unused(_) -> - false. - -is_unresolved_call({_, F, A}) -> - UC = get({?MODULE, unresolved_calls}), - sets:is_element({'$M_EXPR', F, A}, UC); -is_unresolved_call(_) -> - false. - -%% TODO: cache this.... -is_callback({M,_,_}=MFA) -> - Attributes = M:module_info(attributes), - Behaviours = proplists:append_values(behaviour, Attributes), - {_, Callbacks} = lists:foldl(fun acc_behaviours/2, {M, []}, Behaviours), - lists:member(MFA, Callbacks); -is_callback(_) -> - false. - -acc_behaviours(B, {M, CB}=Acc) -> - case catch(B:behaviour_info(callbacks)) of - [{_,_} | _] = Callbacks -> - {M, CB ++ [{M, F, A} || {F,A} <- Callbacks]}; - _ -> - Acc - end. - -%% -%% reporting/output -%% - -report(Results) -> - [report_failures(F) || F <- Results], - {Errors, Warnings} = partition(Results), - report(info, "Completed: ~p errors, ~p warnings~n", - [length(Errors), length(Warnings)]), - case length(Errors) > 0 of - true -> 1; - false -> 0 - end. - -report_failures({analysis_error, {Mod, Reason}}) -> - report(error, "~s:0 Analysis Error: ~p~n", [source_file(Mod), Reason]); -report_failures({{Tag, Level}, {{{{M,_,_},L},{{M2,F2,A2},_}},_}}) -> - report(Level, "~s:~w ~s ~p:~p/~p~n", - [source_file(M), L, Tag, M2, F2, A2]); -report_failures({{Tag, Level}, {{M,F,A},L}}) -> - report(Level, "~s:~w ~s ~p:~p/~p~n", [source_file(M), L, Tag, M, F, A]); -report_failures({{Tag, Level}, {M,F,A}}) -> - report(Level, "~s:unknown ~s ~p:~p/~p~n", [source_file(M), Tag, M, F, A]); -report_failures(Term) -> - report(error, "Ignoring ~p~n", [Term]), - ok. - -report_progress(Fmt, Args) -> - report(info, Fmt, Args). - -report(Level, Fmt, Args) -> - case {get({?MODULE, quiet}), Level} of - {true, error} -> do_report(lookup_prefix(Level), Fmt, Args); - {false, _} -> do_report(lookup_prefix(Level), Fmt, Args); - _ -> ok - end. - -do_report(Prefix, Fmt, Args) -> - io:format(Prefix ++ Fmt, Args). - -lookup_prefix(error) -> "ERROR: "; -lookup_prefix(warning) -> "WARNING: "; -lookup_prefix(info) -> "INFO: ". - -source_file(M) -> - proplists:get_value(source, M:module_info(compile)). - -%% -%% setup/code-path/file-system ops -%% - -store_third_party(App) -> - {ok, AppConfig} = application:get_all_key(App), - AppModules = proplists:get_value(modules, AppConfig), - put({?MODULE, third_party}, AppModules ++ get({?MODULE, third_party})). - -%% TODO: this ought not to be maintained in such a fashion -external_dependency(Path) -> - lists:any(fun(P) -> lists:prefix(P, Path) end, - ["mochiweb", "webmachine", "rfc4627", "eldap"]). - -unmangle_name(Path) -> - [Name, Vsn | _] = re:split(Path, "-", [{return, list}]), - string:join([Name, Vsn], "-"). - -store_unresolved_calls() -> - {ok, UCFull} = analyse("UC"), - UC = [MFA || {_, {_,_,_} = MFA} <- UCFull], - put({?MODULE, unresolved_calls}, sets:from_list(UC)). diff --git a/deps/rabbit/docs/rabbitmq-diagnostics.8 b/deps/rabbit/docs/rabbitmq-diagnostics.8 index 8493173ff309604706a25b66aa3f81c8f3b205aa..226125b7bfcfea8959f4c8a01d9b8b8e24dab8b3 100644 --- a/deps/rabbit/docs/rabbitmq-diagnostics.8 +++ b/deps/rabbit/docs/rabbitmq-diagnostics.8 @@ -705,7 +705,19 @@ in See .Cm quorum_status in -.Xr rabbitmqctl 8 +.Xr rabbitmq-queues 8 +.It Cm check_if_node_is_mirror_sync_critical +.Pp +See +.Cm check_if_node_is_mirror_sync_critical +in +.Xr rabbitmq-queues 8 +.It Cm check_if_node_is_quorum_critical +.Pp +See +.Cm check_if_node_is_quorum_critical +in +.Xr rabbitmq-queues 8 .\" ------------------------------------------------------------------ .Sh SEE ALSO .\" ------------------------------------------------------------------ diff --git a/deps/rabbit/docs/rabbitmq-queues.8 b/deps/rabbit/docs/rabbitmq-queues.8 index 9ca51645a7299ce1b98a75458cd385febcbd8fbe..d72cb2324af95e6cdae784bed810bc769c6158dd 100644 --- a/deps/rabbit/docs/rabbitmq-queues.8 +++ b/deps/rabbit/docs/rabbitmq-queues.8 @@ -181,6 +181,20 @@ Displays quorum status of a quorum queue. Example: .Sp .Dl rabbitmq-queues quorum_status --vhost Qo a-vhost Qc Qo a-queue Qc +.It Cm check_if_node_is_mirror_sync_critical +.Pp +Health check that exits with a non-zero code if there are classic mirrored queues without online synchronised mirrors (queues that would potentially lose data if the target node is shut down). +.Pp +Example: +.Sp +.Dl rabbitmq-queues check_if_node_is_mirror_sync_critical +.It Cm check_if_node_is_quorum_critical +.Pp +Health check that exits with a non-zero code if there are queues with minimum online quorum (queues that would lose their quorum if the target node is shut down). +.Pp +Example: +.Sp +.Dl rabbitmq-queues check_if_node_is_quorum_critical .\" ------------------------------------------------------------------ .Sh SEE ALSO .\" ------------------------------------------------------------------ diff --git a/deps/rabbit/docs/rabbitmq.conf.example b/deps/rabbit/docs/rabbitmq.conf.example index ff8ea0ae67e28ec7c3eab8742c27ab287f42a771..a4ffbfa1db894f6468d3589427fa79db2307a0ed 100644 --- a/deps/rabbit/docs/rabbitmq.conf.example +++ b/deps/rabbit/docs/rabbitmq.conf.example @@ -456,7 +456,7 @@ ## # raft.segment_max_entries = 65536 # raft.wal_max_size_bytes = 1048576 -# raft.wal_max_batch_size = 32768 +# raft.wal_max_batch_size = 4096 # raft.snapshot_chunk_size = 1000000 ## diff --git a/deps/rabbit/erlang.mk b/deps/rabbit/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbit/erlang.mk +++ b/deps/rabbit/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 1220b0dd051359380e6e345ce1595dba9ebf598d..7fed1372cf8d3d9f2fde3511c062d1ecf3d6d9a9 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -952,6 +952,30 @@ fun(Conf) -> end end}. +%% Cluster formation: discovery failure retries + +{mapping, "cluster_formation.lock_retry_limit", "rabbit.cluster_formation.lock_retry_limit", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. +{mapping, "cluster_formation.lock_retry_timeout", "rabbit.cluster_formation.lock_retry_timeout", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. + +{mapping, "cluster_formation.discovery_retry_limit", "rabbit.cluster_formation.discovery_retry_limit", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. +{mapping, "cluster_formation.discovery_retry_interval", "rabbit.cluster_formation.discovery_retry_interval", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. + %% Classic config-driven peer discovery backend. %% %% Make clustering happen *automatically* at startup - only applied diff --git a/deps/rabbit/quickcheck b/deps/rabbit/quickcheck deleted file mode 100755 index 59da37191e9dc56b5e66fe238be47f509a1ad116..0000000000000000000000000000000000000000 --- a/deps/rabbit/quickcheck +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env escript -%% -*- erlang -*- -%%! -sname quickcheck --mode(compile). - -%% A helper to test quickcheck properties on a running broker -%% NodeStr is a local broker node name -%% ModStr is the module containing quickcheck properties -%% TrialsStr is the number of trials -main([NodeStr, ModStr, NumTestsStr, MaxSizeStr]) -> - {ok, Hostname} = inet:gethostname(), - Node = list_to_atom(NodeStr ++ "@" ++ Hostname), - Mod = list_to_atom(ModStr), - NumTests = erlang:list_to_integer(NumTestsStr), - MaxSize = erlang:list_to_integer(MaxSizeStr), - case rpc:call(Node, code, ensure_loaded, [proper]) of - {module, proper} -> - case rpc:call(Node, proper, module, - [Mod] ++ [[{numtests, NumTests}, - {max_size, MaxSize}, - {constraint_tries, 200}]]) of - [] -> ok; - R -> io:format("~p.~n", [R]), - quit(1) - end; - {badrpc, Reason} -> - io:format("Could not contact node ~p: ~p.~n", [Node, Reason]), - quit(2); - {error,nofile} -> - io:format("Module PropEr was not found on node ~p~n", [Node]), - quit(2) - end; -main([]) -> - io:format("This script requires a node name and a module.~n"). - -quit(Status) -> - case os:type() of - {unix, _} -> halt(Status); - {win32, _} -> init:stop(Status) - end. - diff --git a/deps/rabbit/rabbitmq-components.mk b/deps/rabbit/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbit/rabbitmq-components.mk +++ b/deps/rabbit/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbit/scripts/cuttlefish b/deps/rabbit/scripts/cuttlefish deleted file mode 100755 index e63ac1c1b34e9c7876eb2d66fe996bb9bb5aa6e5..0000000000000000000000000000000000000000 Binary files a/deps/rabbit/scripts/cuttlefish and /dev/null differ diff --git a/deps/rabbit/scripts/rabbitmq-defaults b/deps/rabbit/scripts/rabbitmq-defaults index ba09c7ce627baddd7bae3db606857944ff5ceb07..eca44d8af4aa9114689f7b72f5e1a0cf35656cd0 100755 --- a/deps/rabbit/scripts/rabbitmq-defaults +++ b/deps/rabbit/scripts/rabbitmq-defaults @@ -18,41 +18,10 @@ ### next line potentially updated in package install steps SYS_PREFIX= -### next line will be updated when generating a standalone release -ERL_DIR= - CLEAN_BOOT_FILE=start_clean SASL_BOOT_FILE=start_sasl - -if [ -f "${RABBITMQ_HOME}/erlang.mk" ]; then - # RabbitMQ is executed from its source directory. The plugins - # directory and ERL_LIBS are tuned based on this. - RABBITMQ_DEV_ENV=1 -fi - -## Set default values - BOOT_MODULE="rabbit" -CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq -LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq -MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia -ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins -GENERATED_CONFIG_DIR=${SYS_PREFIX}/var/lib/rabbitmq/config -ADVANCED_CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/advanced.config -SCHEMA_DIR=${SYS_PREFIX}/var/lib/rabbitmq/schema - -PLUGINS_DIR="${RABBITMQ_HOME}/plugins" - -# RABBIT_HOME can contain a version number, so default plugins -# directory can be hard to find if we want to package some plugin -# separately. When RABBITMQ_HOME points to a standard location where -# it's usually being installed by package managers, we add -# "/usr/lib/rabbitmq/plugins" to plugin search path. -case "$RABBITMQ_HOME" in - /usr/lib/rabbitmq/*) - PLUGINS_DIR="/usr/lib/rabbitmq/plugins:$PLUGINS_DIR" - ;; -esac - -CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf +if test -z "$CONF_ENV_FILE" && test -z "$RABBITMQ_CONF_ENV_FILE"; then + CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf +fi diff --git a/deps/rabbit/scripts/rabbitmq-defaults.bat b/deps/rabbit/scripts/rabbitmq-defaults.bat index 18d4f469439d6b97849d19252e76541b05c6b8b4..0da11f2a0c5a7fd8e9a5b3e9f6e12c5d584bf85f 100644 --- a/deps/rabbit/scripts/rabbitmq-defaults.bat +++ b/deps/rabbit/scripts/rabbitmq-defaults.bat @@ -1,23 +1,8 @@ @echo off -REM ### next line potentially updated in package install steps -REM set SYS_PREFIX= - -REM ### next line will be updated when generating a standalone release -REM ERL_DIR= -set ERL_DIR= - -REM This boot files isn't referenced in the batch scripts -REM set SASL_BOOT_FILE=start_sasl +set SASL_BOOT_FILE=start_sasl set CLEAN_BOOT_FILE=start_clean - -if exist "%RABBITMQ_HOME%\erlang.mk" ( - REM RabbitMQ is executed from its source directory. The plugins - REM directory and ERL_LIBS are tuned based on this. - set RABBITMQ_DEV_ENV=1 -) - -REM ## Set default values +set BOOT_MODULE=rabbit if "!RABBITMQ_BASE!"=="" ( set RABBITMQ_BASE=!APPDATA!\RabbitMQ @@ -29,22 +14,4 @@ if not exist "!RABBITMQ_BASE!" ( mkdir "!RABBITMQ_BASE!" ) -REM BOOT_MODULE="rabbit" -REM CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq -REM LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq -REM MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia -REM ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins -set BOOT_MODULE=rabbit -set CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq -set LOG_BASE=!RABBITMQ_BASE!\log -set MNESIA_BASE=!RABBITMQ_BASE!\db -set ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins -set GENERATED_CONFIG_DIR=!RABBITMQ_BASE!\config -set ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config -set SCHEMA_DIR=!RABBITMQ_BASE!\schema - -REM PLUGINS_DIR="${RABBITMQ_HOME}/plugins" -for /f "delims=" %%F in ("!TDP0!..\plugins") do set PLUGINS_DIR=%%~dpF%%~nF%%~xF - -REM CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf set CONF_ENV_FILE=!RABBITMQ_BASE!\rabbitmq-env-conf.bat diff --git a/deps/rabbit/scripts/rabbitmq-diagnostics.bat b/deps/rabbit/scripts/rabbitmq-diagnostics.bat index 07a0af57f82f678d5c7401bf6be8f7b828976b81..9f62245a82f21d2343c5c3697d6bd9b1673fd685 100644 --- a/deps/rabbit/scripts/rabbitmq-diagnostics.bat +++ b/deps/rabbit/scripts/rabbitmq-diagnostics.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-diagnostics" !STAR! @@ -61,4 +57,6 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal diff --git a/deps/rabbit/scripts/rabbitmq-env b/deps/rabbit/scripts/rabbitmq-env index d043747814a2c2423091ea5304039c3df69eca57..bc451e0eede37f384c5039a169e9abe4de18262a 100755 --- a/deps/rabbit/scripts/rabbitmq-env +++ b/deps/rabbit/scripts/rabbitmq-env @@ -91,20 +91,6 @@ rmq_realpath() { fi } -path_contains_existing_directory() { - local path="${1:?}" - local dir - local rc - local IFS=" - " - for dir in $(echo "$path" | tr ':' '\n'); do - if [ -d "$dir" ]; then - return 0 - fi - done - return 1 -} - RABBITMQ_HOME="$(rmq_realpath "${RABBITMQ_SCRIPTS_DIR}/..")" ESCRIPT_DIR="${RABBITMQ_HOME}/escript" @@ -118,7 +104,10 @@ saved_RABBITMQ_PID_FILE="$RABBITMQ_PID_FILE" ## Get configuration variables from the configure environment file [ "x" = "x$RABBITMQ_CONF_ENV_FILE" ] && RABBITMQ_CONF_ENV_FILE=${CONF_ENV_FILE} -[ -f ${RABBITMQ_CONF_ENV_FILE} ] && . ${RABBITMQ_CONF_ENV_FILE} || true +if [ -f "${RABBITMQ_CONF_ENV_FILE}" ]; then + CONF_ENV_FILE_PHASE=rabbitmq-env + . ${RABBITMQ_CONF_ENV_FILE} || true +fi [ -n "$ERL_EPMD_PORT" ] && export ERL_EPMD_PORT [ -n "$ERL_EPMD_ADDRESS" ] && export ERL_EPMD_ADDRESS @@ -142,125 +131,17 @@ DEFAULT_MAX_NUMBER_OF_ATOMS=5000000 ## Common server defaults SERVER_ERL_ARGS=" +P $RABBITMQ_MAX_NUMBER_OF_PROCESSES +t $RABBITMQ_MAX_NUMBER_OF_ATOMS +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE " -[ "x" = "x$RABBITMQ_USE_LONGNAME" ] && RABBITMQ_USE_LONGNAME=${USE_LONGNAME} -if [ "xtrue" = "x$RABBITMQ_USE_LONGNAME" ] ; then - RABBITMQ_NAME_TYPE=-name - [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname -f` - [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME} -else - RABBITMQ_NAME_TYPE=-sname - [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname` - [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME%%.*} -fi - ##--- Set environment vars RABBITMQ_ to defaults if not set -rmq_normalize_path() { - local path=$1 - - # Remove redundant slashes and strip a trailing slash for a - # PATH-like vars - ':' is the delimiter - echo "$path" | sed -e 's#/\{2,\}#/#g' -e 's#/$##' -e 's#/:#:#g' -} - -rmq_normalize_path_var() { - local var warning - - local prefix="WARNING:" - - for var in "$@"; do - local path=$(eval "echo \"\$$var\"") - case "$path" in - */) - warning=1 - echo "$prefix Removing trailing slash from $var" 1>&2 - ;; - esac - - eval "$var=$(rmq_normalize_path "$path")" - - if [ "x$warning" = "x1" ]; then - prefix=" " - fi - done -} - -rmq_check_if_shared_with_mnesia() { - local var warning - - local mnesia_dir=$(rmq_realpath "${RABBITMQ_MNESIA_DIR}") - local prefix="WARNING:" - - for var in "$@"; do - local dir=$(eval "echo \"\$$var\"") - - case $(rmq_realpath "$dir") in - ${mnesia_dir}) - warning=1 - echo "$prefix $var is equal to RABBITMQ_MNESIA_DIR" 1>&2 - ;; - ${mnesia_dir}/*) - warning=1 - echo "$prefix $var is located inside RABBITMQ_MNESIA_DIR" 1>&2 - ;; - esac - - if [ "x$warning" = "x1" ]; then - prefix=" " - fi - done - - if [ "x$warning" = "x1" ]; then - echo "$prefix => Auto-clustering will not work ('cluster_nodes' in rabbitmq.config)" 1>&2 - fi -} - -DEFAULT_NODE_IP_ADDRESS=auto -DEFAULT_NODE_PORT=5672 - -[ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS} -[ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} - -[ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS} -[ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT} - -[ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT} -[ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000)) -[ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000)) - -[ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MIN" ] && RABBITMQ_CTL_DIST_PORT_MIN=${CTL_DIST_PORT_MIN} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MAX" ] && RABBITMQ_CTL_DIST_PORT_MAX=${CTL_DIST_PORT_MAX} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MIN" ] && RABBITMQ_CTL_DIST_PORT_MIN=$((${RABBITMQ_DIST_PORT} + 10000)) -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MAX" ] && RABBITMQ_CTL_DIST_PORT_MAX=$((${RABBITMQ_DIST_PORT} + 10010)) - -[ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} +# FIXME [ "x" = "x$RABBITMQ_IO_THREAD_POOL_SIZE" ] && RABBITMQ_IO_THREAD_POOL_SIZE=${IO_THREAD_POOL_SIZE} [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} -[ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE} -[ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE} -[ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE} [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS} [ "x" = "x$RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ] && RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=${SERVER_ADDITIONAL_ERL_ARGS} [ "x" = "x$RABBITMQ_SERVER_CODE_PATH" ] && RABBITMQ_SERVER_CODE_PATH=${SERVER_CODE_PATH} -[ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR} -[ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} -[ "x" = "x$RABBITMQ_QUORUM_DIR" ] && RABBITMQ_QUORUM_DIR=${RABBITMQ_MNESIA_DIR}/quorum -[ "x" = "x$RABBITMQ_GENERATED_CONFIG_DIR" ] && RABBITMQ_GENERATED_CONFIG_DIR=${GENERATED_CONFIG_DIR} -[ "x" = "x$RABBITMQ_ADVANCED_CONFIG_FILE" ] && RABBITMQ_ADVANCED_CONFIG_FILE=${ADVANCED_CONFIG_FILE} -[ "x" = "x$RABBITMQ_SCHEMA_DIR" ] && RABBITMQ_SCHEMA_DIR=${SCHEMA_DIR} [ "x" = "x$RABBITMQ_IGNORE_SIGINT" ] && RABBITMQ_IGNORE_SIGINT="true" [ "xtrue" = "x$RABBITMQ_IGNORE_SIGINT" ] && RABBITMQ_IGNORE_SIGINT_FLAG="+B i" -rmq_normalize_path_var \ - RABBITMQ_CONFIG_FILE \ - RABBITMQ_LOG_BASE \ - RABBITMQ_MNESIA_BASE \ - RABBITMQ_MNESIA_DIR \ - RABBITMQ_QUORUM_DIR - -[ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE="$PID_FILE" - if [ -n "$saved_RABBITMQ_PID_FILE" ] && \ [ "$saved_RABBITMQ_PID_FILE" != "$RABBITMQ_PID_FILE" ] then @@ -271,155 +152,19 @@ then RABBITMQ_PID_FILE="$saved_RABBITMQ_PID_FILE" fi -# Note: at this point, no RABBITMQ_PID_FILE is set so we use the mnesia dir value -[ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE="${RABBITMQ_MNESIA_DIR}.pid" - -rmq_normalize_path_var RABBITMQ_PID_FILE - [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE} -[ "x" != "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE_source=environment -[ "x" = "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags -rmq_normalize_path_var RABBITMQ_FEATURE_FLAGS_FILE - -[ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR} -[ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand -rmq_normalize_path_var RABBITMQ_PLUGINS_EXPAND_DIR - -[ "x" != "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE_source=environment -[ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} -rmq_normalize_path_var RABBITMQ_ENABLED_PLUGINS_FILE - -[ "x" != "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR_source=environment -[ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} -rmq_normalize_path_var RABBITMQ_PLUGINS_DIR - -## Log rotation -[ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS} -[ "x" != "x$RABBITMQ_LOGS" ] && export RABBITMQ_LOGS_source=environment -[ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log" -[ "x" = "x$RABBITMQ_UPGRADE_LOG" ] && RABBITMQ_UPGRADE_LOG="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log" -[ "x" = "x$ERL_CRASH_DUMP" ] && ERL_CRASH_DUMP="${RABBITMQ_LOG_BASE}/erl_crash.dump" - -rmq_normalize_path_var RABBITMQ_LOGS - -rmq_normalize_path_var RABBITMQ_UPGRADE_LOG - -# Check if files and directories non-related to Mnesia are configured -# to be in $RABBITMQ_MNESIA_DIR. If this is the case, issue a warning -# because it will prevent auto-clustering from working (the node will be -# considered non-virgin). - -rmq_check_if_shared_with_mnesia \ - RABBITMQ_CONFIG_FILE \ - RABBITMQ_LOG_BASE \ - RABBITMQ_PID_FILE \ - RABBITMQ_FEATURE_FLAGS_FILE \ - RABBITMQ_PLUGINS_EXPAND_DIR \ - RABBITMQ_ENABLED_PLUGINS_FILE \ - RABBITMQ_PLUGINS_DIR \ - RABBITMQ_LOGS \ - RABBITMQ_UPGRADE_LOG - ##--- End of overridden variables -## Development-specific environment. -if [ "${RABBITMQ_DEV_ENV}" ]; then - if [ "$RABBITMQ_FEATURE_FLAGS_FILE_source" != 'environment' -o \ - "$RABBITMQ_PLUGINS_DIR_source" != 'environment' -o \ - "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' ]; then - # We need to query the running node for the plugins directory - # and the "enabled plugins" file. - for arg in "$@"; do - case "$arg" in - -n) - next_is_node=1 - ;; - *) - if test "$next_is_node"; then - # If the executed script is being passed a remote node - # name, use it here to query the remote node. - node_arg="-n $arg" - break - fi - ;; - esac - done - eval $( (${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl $node_arg eval \ - '{ok, F} = application:get_env(rabbit, feature_flags_file), - {ok, P} = application:get_env(rabbit, plugins_dir), - {ok, E} = application:get_env(rabbit, enabled_plugins_file), - B = os:getenv("RABBITMQ_MNESIA_BASE"), - M = os:getenv("RABBITMQ_MNESIA_DIR"), - io:format( - "feature_flags_file=\"~s\"~n" - "plugins_dir=\"~s\"~n" - "enabled_plugins_file=\"~s\"~n" - "mnesia_base=\"~s\"~n" - "mnesia_dir=\"~s\"~n", [F, P, E, B, M]).' \ - 2>/dev/null | grep -E '^(feature_flags_file|plugins_dir|enabled_plugins_file|mnesia_base|mnesia_dir)=') || :) - - if [ "${feature_flags_file}" -a \ - "$RABBITMQ_FEATURE_FLAGS_FILE_source" != 'environment' ]; then - RABBITMQ_FEATURE_FLAGS_FILE="${feature_flags_file}" - fi - if [ "${plugins_dir}" -a \ - "$RABBITMQ_PLUGINS_DIR_source" != 'environment' ]; then - RABBITMQ_PLUGINS_DIR="${plugins_dir}" - fi - if [ "${enabled_plugins_file}" -a \ - "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' ]; then - RABBITMQ_ENABLED_PLUGINS_FILE="${enabled_plugins_file}" - fi - if [ "${mnesia_base}" -a \ - "$RABBITMQ_MNESIA_BASE_source" != 'environment' ]; then - RABBITMQ_MNESIA_BASE="${mnesia_base}" - fi - if [ "${mnesia_dir}" -a \ - "$RABBITMQ_MNESIA_DIR_source" != 'environment' ]; then - RABBITMQ_MNESIA_DIR="${mnesia_dir}" - fi - if [ "${mnesia_dir}" -a \ - "$RABBITMQ_QUORUM_DIR_source" != 'environment' ]; then - RABBITMQ_QUORUM_DIR="${mnesia_dir}/quorum" - fi - fi - - if path_contains_existing_directory "${RABBITMQ_PLUGINS_DIR}" ; then - # RabbitMQ was started with "make run-broker" from its own - # source tree. Take rabbit_common from the plugins directory. - ERL_LIBS="${RABBITMQ_PLUGINS_DIR}:${ERL_LIBS}" +_rmq_env_set_erl_libs() +{ + if [ -n "$ERL_LIBS" ] + then + export ERL_LIBS="$RABBITMQ_HOME/plugins:$ERL_LIBS" else - # RabbitMQ runs from a testsuite or a plugin. The .ez files are - # not available under RabbitMQ source tree. We need to look at - # $DEPS_DIR and default locations. - - if [ "${DEPS_DIR}" -a -d "${DEPS_DIR}/rabbit_common/ebin" ]; then - # $DEPS_DIR is set, and it contains rabbitmq-common, use - # this. - DEPS_DIR_norm="${DEPS_DIR}" - elif [ -f "${RABBITMQ_SCRIPTS_DIR}/../../../erlang.mk" -a \ - -d "${RABBITMQ_SCRIPTS_DIR}/../../rabbit_common/ebin" ]; then - # Look at default locations: "deps" subdirectory inside a - # plugin or the Umbrella. - DEPS_DIR_norm="${RABBITMQ_SCRIPTS_DIR}/../.." - fi - DEPS_DIR_norm=$(rmq_realpath "${DEPS_DIR_norm}") - - ERL_LIBS="${DEPS_DIR_norm}:${ERL_LIBS}" + export ERL_LIBS="$RABBITMQ_HOME/plugins" fi -else - if path_contains_existing_directory "${RABBITMQ_PLUGINS_DIR}" ; then - # RabbitMQ was started from its install directory. Take - # rabbit_common from the plugins directory. - ERL_LIBS="${RABBITMQ_PLUGINS_DIR}:${ERL_LIBS}" - fi -fi - -ERL_LIBS=${ERL_LIBS%:} -if [ "$ERL_LIBS" ]; then - export ERL_LIBS -fi +} run_escript() { @@ -428,17 +173,15 @@ run_escript() escript="${1:?escript must be defined}" shift + _rmq_env_set_erl_libs + # Important: do not quote RABBITMQ_CTL_ERL_ARGS as they must be # word-split # shellcheck disable=SC2086 - exec "${ERL_DIR}erl" +B \ + exec erl +B \ -boot "$CLEAN_BOOT_FILE" \ -noinput -noshell -hidden -smp enable \ $RABBITMQ_CTL_ERL_ARGS \ - -kernel inet_dist_listen_min "$RABBITMQ_CTL_DIST_PORT_MIN" \ - -kernel inet_dist_listen_max "$RABBITMQ_CTL_DIST_PORT_MAX" \ - -sasl errlog_type error \ - -mnesia dir "\"$RABBITMQ_MNESIA_DIR\"" \ -run escript start \ -escript main "$escript_main" \ -extra "$escript" "$@" diff --git a/deps/rabbit/scripts/rabbitmq-env.bat b/deps/rabbit/scripts/rabbitmq-env.bat index 0c97aaa014eaf71ffa822d0104cb969c1f183f31..a8717070f2a388d3a50a64c63624bcdd9c6ddcb9 100644 --- a/deps/rabbit/scripts/rabbitmq-env.bat +++ b/deps/rabbit/scripts/rabbitmq-env.bat @@ -14,10 +14,16 @@ set SCRIPT_DIR=%TDP0% set SCRIPT_NAME=%1 for /f "delims=" %%F in ("%SCRIPT_DIR%..") do set RABBITMQ_HOME=%%~dpF%%~nF%%~xF +if defined ERL_LIBS ( + set ERL_LIBS=%RABBITMQ_HOME%\plugins;%ERL_LIBS% +) else ( + set ERL_LIBS=%RABBITMQ_HOME%\plugins +) + REM If ERLANG_HOME is not defined, check if "erl.exe" is available in REM the path and use that. if not defined ERLANG_HOME ( - for /f "delims=" %%F in ('where.exe erl.exe') do @set ERL_PATH=%%F + for /f "delims=" %%F in ('powershell.exe -NoLogo -NoProfile -NonInteractive -Command "(Get-Command erl.exe).Definition"') do @set ERL_PATH=%%F if exist "!ERL_PATH!" ( for /f "delims=" %%F in ("!ERL_PATH!") do set ERL_DIRNAME=%%~dpF for /f "delims=" %%F in ("!ERL_DIRNAME!\..") do @set ERLANG_HOME=%%~dpF%%~nF%%~xF @@ -82,163 +88,16 @@ if "!RABBITMQ_MAX_NUMBER_OF_ATOMS!"=="" ( set RABBITMQ_MAX_NUMBER_OF_ATOMS=!DEFAULT_MAX_NUMBER_OF_ATOMS! ) -REM Common defaults +REM Common server defaults set SERVER_ERL_ARGS=+P !RABBITMQ_MAX_NUMBER_OF_PROCESSES! +t !RABBITMQ_MAX_NUMBER_OF_ATOMS! +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE! -REM Check for the short names here too -if "!RABBITMQ_USE_LONGNAME!"=="true" ( - set RABBITMQ_NAME_TYPE=-name - set NAMETYPE=longnames -) else ( - if "!USE_LONGNAME!"=="true" ( - set RABBITMQ_USE_LONGNAME=true - set RABBITMQ_NAME_TYPE=-name - set NAMETYPE=longnames - ) else ( - set RABBITMQ_USE_LONGNAME=false - set RABBITMQ_NAME_TYPE=-sname - set NAMETYPE=shortnames - ) -) - -REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} -if "!RABBITMQ_NODENAME!"=="" ( - if "!NODENAME!"=="" ( - REM We use Erlang to query the local hostname because - REM !COMPUTERNAME! and Erlang may return different results. - REM Start erl with -sname to make sure epmd is started. - call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -sname rabbit-prelaunch-epmd -eval "init:stop()." >nul 2>&1 - for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F - set RABBITMQ_NODENAME=rabbit@!HOSTNAME! - set HOSTNAME= - ) else ( - set RABBITMQ_NODENAME=!NODENAME! - ) -) -set NAMETYPE= - -REM REM ##--- Set environment vars RABBITMQ_ to defaults if not set -REM -REM DEFAULT_NODE_IP_ADDRESS=auto -REM DEFAULT_NODE_PORT=5672 -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS} -REM [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS} -REM [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT} - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!NODE_IP_ADDRESS!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=!NODE_IP_ADDRESS! - ) -) - -if "!RABBITMQ_NODE_PORT!"=="" ( - if not "!NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=!NODE_PORT! - ) -) - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=auto - ) -) else ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=5672 - ) -) - -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT} -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000)) -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000)) - -if "!RABBITMQ_DIST_PORT!"=="" ( - if "!DIST_PORT!"=="" ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_DIST_PORT=25672 - ) else ( - set /a RABBITMQ_DIST_PORT=20000+!RABBITMQ_NODE_PORT! - ) - ) else ( - set RABBITMQ_DIST_PORT=!DIST_PORT! - ) -) REM [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} if "!RABBITMQ_SERVER_ERL_ARGS!"=="" ( set RABBITMQ_SERVER_ERL_ARGS=!SERVER_ERL_ARGS! ) -REM [ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE} -if "!RABBITMQ_CONFIG_FILE!"=="" ( - if "!CONFIG_FILE!"=="" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq - ) else ( - set RABBITMQ_CONFIG_FILE=!CONFIG_FILE:"=! - ) -) else ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE:"=! -) - -if "!RABBITMQ_GENERATED_CONFIG_DIR!"=="" ( - if "!GENERATED_CONFIG_DIR!"=="" ( - set RABBITMQ_GENERATED_CONFIG_DIR=!RABBITMQ_BASE!\config - ) else ( - set RABBITMQ_GENERATED_CONFIG_DIR=!GENERATED_CONFIG_DIR:"=! - ) -) else ( - set RABBITMQ_GENERATED_CONFIG_DIR=!RABBITMQ_GENERATED_CONFIG_DIR:"=! -) - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!"=="" ( - if "!ADVANCED_CONFIG_FILE!"=="" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config - ) else ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!ADVANCED_CONFIG_FILE:"=! - ) -) else ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE:"=! -) - -if "!RABBITMQ_SCHEMA_DIR!" == "" ( - if "!SCHEMA_DIR!"=="" ( - set RABBITMQ_SCHEMA_DIR=!RABBITMQ_HOME!\priv\schema - ) else ( - set RABBITMQ_SCHEMA_DIR=!SCHEMA_DIR:"=! - ) -) else ( - set RABBITMQ_SCHEMA_DIR=!RABBITMQ_SCHEMA_DIR:"=! -) - -REM [ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE} -if "!RABBITMQ_LOG_BASE!"=="" ( - if "!LOG_BASE!"=="" ( - set RABBITMQ_LOG_BASE=!RABBITMQ_BASE!\log - ) else ( - set RABBITMQ_LOG_BASE=!LOG_BASE:"=! - ) -) else ( - set RABBITMQ_LOG_BASE=!RABBITMQ_LOG_BASE:"=! -) -if not exist "!RABBITMQ_LOG_BASE!" ( - mkdir "!RABBITMQ_LOG_BASE!" -) - -REM [ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE} -if "!RABBITMQ_MNESIA_BASE!"=="" ( - if "!MNESIA_BASE!"=="" ( - set RABBITMQ_MNESIA_BASE=!RABBITMQ_BASE!\db - ) else ( - set RABBITMQ_MNESIA_BASE=!MNESIA_BASE:"=! - ) -) else ( - set RABBITMQ_MNESIA_BASE=!RABBITMQ_MNESIA_BASE:"=! -) -if not exist "!RABBITMQ_MNESIA_BASE!" ( - mkdir "!RABBITMQ_MNESIA_BASE!" -) - REM [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS} if "!RABBITMQ_SERVER_START_ARGS!"=="" ( if not "!SERVER_START_ARGS!"=="" ( @@ -253,34 +112,6 @@ if "!RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS!"=="" ( ) ) -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR} -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} -if "!RABBITMQ_MNESIA_DIR!"=="" ( - if "!MNESIA_DIR!"=="" ( - set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-mnesia - ) else ( - set RABBITMQ_MNESIA_DIR=!MNESIA_DIR:"=! - ) -) else ( - set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_DIR:"=! -) -if not exist "!RABBITMQ_MNESIA_DIR!" ( - mkdir "!RABBITMQ_MNESIA_DIR!" -) - -REM [ "x" = "x$RABBITMQ_QUORUM_DIR" ] && RABBITMQ_QUORUM_DIR=${RABBITMQ_MNESIA_DIR}/quorum -if "!RABBITMQ_QUORUM_DIR!"=="" ( - set RABBITMQ_QUORUM_DIR=!RABBITMQ_MNESIA_DIR!\quorum -) -if not exist "!RABBITMQ_QUORUM_DIR!" ( - mkdir "!RABBITMQ_QUORUM_DIR!" -) -for /f "delims=" %%F in ("!RABBITMQ_QUORUM_DIR!") do set RABBITMQ_QUORUM_DIR=%%~sF - -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${PID_FILE} -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${RABBITMQ_MNESIA_DIR}.pid -REM No Windows equivalent - REM [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE} if "!RABBITMQ_BOOT_MODULE!"=="" ( if "!BOOT_MODULE!"=="" ( @@ -290,114 +121,12 @@ if "!RABBITMQ_BOOT_MODULE!"=="" ( ) ) -REM [ "x" = "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags -if "!RABBITMQ_FEATURE_FLAGS_FILE!"=="" ( - if "!FEATURE_FLAGS_FILE!"=="" ( - set RABBITMQ_FEATURE_FLAGS_FILE=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-feature_flags - ) else ( - set RABBITMQ_FEATURE_FLAGS_FILE=!FEATURE_FLAGS_FILE:"=! - ) -) else ( - set RABBITMQ_FEATURE_FLAGS_FILE=!RABBITMQ_FEATURE_FLAGS_FILE:"=! - set RABBITMQ_FEATURE_FLAGS_FILE_source=environment -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR} -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand -if "!RABBITMQ_PLUGINS_EXPAND_DIR!"=="" ( - if "!PLUGINS_EXPAND_DIR!"=="" ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-plugins-expand - ) else ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!PLUGINS_EXPAND_DIR:"=! - ) -) else ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_PLUGINS_EXPAND_DIR:"=! -) - -REM [ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} -if "!RABBITMQ_ENABLED_PLUGINS_FILE!"=="" ( - if "!ENABLED_PLUGINS_FILE!"=="" ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins - ) else ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!ENABLED_PLUGINS_FILE:"=! - ) -) else ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_ENABLED_PLUGINS_FILE:"=! - set RABBITMQ_ENABLED_PLUGINS_FILE_source=environment -) -if not exist "!RABBITMQ_ENABLED_PLUGINS_FILE!" ( - for /f "delims=" %%F in ("!RABBITMQ_ENABLED_PLUGINS_FILE!") do mkdir "%%~dpF" 2>NUL - copy /y NUL "!RABBITMQ_ENABLED_PLUGINS_FILE!" >NUL -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} -if "!RABBITMQ_PLUGINS_DIR!"=="" ( - if "!PLUGINS_DIR!"=="" ( - set RABBITMQ_PLUGINS_DIR=!RABBITMQ_HOME!\plugins - ) else ( - set RABBITMQ_PLUGINS_DIR=!PLUGINS_DIR:"=! - ) -) else ( - set RABBITMQ_PLUGINS_DIR=!RABBITMQ_PLUGINS_DIR:"=! - set RABBITMQ_PLUGINS_DIR_source=environment -) -if not exist "!RABBITMQ_PLUGINS_DIR!" ( - mkdir "!RABBITMQ_PLUGINS_DIR!" -) - -REM ## Log rotation -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS} -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log" -if "!RABBITMQ_LOGS!"=="" ( - if "!LOGS!"=="" ( - set RABBITMQ_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!.log - ) else ( - set RABBITMQ_LOGS=!LOGS:"=! - ) -) else ( - set RABBITMQ_LOGS=!RABBITMQ_LOGS:"=! -) -if not "!RABBITMQ_LOGS!" == "-" ( - if not exist "!RABBITMQ_LOGS!" ( - for /f "delims=" %%F in ("!RABBITMQ_LOGS!") do mkdir "%%~dpF" 2>NUL - copy /y NUL "!RABBITMQ_LOGS!" >NUL - ) -) -rem [ "x" = "x$RABBITMQ_UPGRADE_LOG" ] && RABBITMQ_UPGRADE_LOG="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log" -if "!RABBITMQ_UPGRADE_LOG!" == "" ( - set RABBITMQ_UPGRADE_LOG=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!_upgrade.log -) else ( - set RABBITMQ_UPGRADE_LOG=!RABBITMQ_UPGRADE_LOG:"=! -) -REM [ "x" = "x$ERL_CRASH_DUMP"] && ERL_CRASH_DUMP="${RABBITMQ_LOG_BASE}/erl_crash.dump" -if "!ERL_CRASH_DUMP!"=="" ( - set ERL_CRASH_DUMP=!RABBITMQ_LOG_BASE!\erl_crash.dump -) else ( - set ERL_CRASH_DUMP=!ERL_CRASH_DUMP:"=! -) - REM [ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} if "!RABBITMQ_CTL_ERL_ARGS!"=="" ( if not "!CTL_ERL_ARGS!"=="" ( set RABBITMQ_CTL_ERL_ARGS=!CTL_ERL_ARGS! ) ) -if "!RABBITMQ_CTL_DIST_PORT_MIN!"=="" ( - if not "!CTL_DIST_PORT_MIN!"=="" ( - set RABBITMQ_CTL_DIST_PORT_MIN=!CTL_DIST_PORT_MIN! - ) -) -if "!RABBITMQ_CTL_DIST_PORT_MAX!"=="" ( - if not "!CTL_DIST_PORT_MAX!"=="" ( - set RABBITMQ_CTL_DIST_PORT_MAX=!CTL_DIST_PORT_MAX! - ) -) -if "!RABBITMQ_CTL_DIST_PORT_MIN!"=="" ( - set /a RABBITMQ_CTL_DIST_PORT_MIN=10000+!RABBITMQ_DIST_PORT! -) -if "!RABBITMQ_CTL_DIST_PORT_MAX!"=="" ( - set /a RABBITMQ_CTL_DIST_PORT_MAX=10010+!RABBITMQ_DIST_PORT! -) REM ADDITIONAL WINDOWS ONLY CONFIG ITEMS @@ -409,93 +138,6 @@ if "!RABBITMQ_SERVICENAME!"=="" ( ) ) -REM Development-specific environment. -if defined RABBITMQ_DEV_ENV ( - if "!SCRIPT_NAME!" == "rabbitmq-plugins" ( - REM We may need to query the running node for the plugins directory - REM and the "enabled plugins" file. - if not "%RABBITMQ_FEATURE_FLAGS_FILE_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, feature_flags_file), io:format(""~s~n"", [P])."') do @set feature_flags_file=%%F - if exist "!feature_flags_file!" ( - set RABBITMQ_FEATURE_FLAGS_FILE=!feature_flags_file:"=! - ) - REM set feature_flags_file= - ) - if not "%RABBITMQ_PLUGINS_DIR_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, plugins_dir), io:format(""~s~n"", [P])."') do @set plugins_dir=%%F - if exist "!plugins_dir!" ( - set RABBITMQ_PLUGINS_DIR=!plugins_dir:"=! - ) - REM set plugins_dir= - ) - if not "%RABBITMQ_ENABLED_PLUGINS_FILE_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, enabled_plugins_file), io:format(""~s~n"", [P])."') do @set enabled_plugins_file=%%F - if exist "!enabled_plugins_file!" ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!enabled_plugins_file:"=! - ) - REM set enabled_plugins_file= - ) - ) - - if exist "!RABBITMQ_PLUGINS_DIR!" ( - REM RabbitMQ was started with "make run-broker" from its own - REM source tree. Take rabbit_common from the plugins directory. - set ERL_LIBS=!RABBITMQ_PLUGINS_DIR!;!ERL_LIBS! - ) else ( - REM RabbitMQ runs from a testsuite or a plugin. The .ez files are - REM not available under RabbitMQ source tree. We need to look at - REM $DEPS_DIR and default locations. - - if "!DEPS_DIR!" == "" ( - if exist "!RABBITMQ_HOME!\..\..\deps\rabbit_common\erlang.mk" ( - REM Dependencies in the Umbrella or a plugin. - set DEPS_DIR_norm=!RABBITMQ_HOME!\..\..\deps - ) else ( - if exist "!RABBITMQ_HOME!\deps\rabbit_common\erlang.mk" ( - REM Dependencies in the broker. - set DEPS_DIR_norm=!RABBITMQ_HOME!\deps - ) - ) - ) else ( - for /f "delims=" %%F in ("!DEPS_DIR!") do @set DEPS_DIR_norm=%%~dpF%%~nF%%~xF - ) - - set ERL_LIBS=!DEPS_DIR_norm!;!ERL_LIBS! - ) -) else ( - if exist "!RABBITMQ_PLUGINS_DIR!" ( - REM RabbitMQ was started from its install directory. Take - REM rabbit_common from the plugins directory. - set ERL_LIBS=!RABBITMQ_PLUGINS_DIR:"=!;!ERL_LIBS:"=! - ) -) - -REM Ensure ERL_LIBS begins with valid path -set ERL_LIBS_orig=%ERL_LIBS:"=% -set ERL_LIBS= -call :filter_paths "%ERL_LIBS_orig%" -goto :filter_paths_done - -:filter_paths -set paths=%1 -set paths=%paths:"=% -for /f "tokens=1* delims=;" %%a in ("%paths%") do ( - if not "%%a" == "" call :filter_path "%%a" - if not "%%b" == "" call :filter_paths "%%b" -) -set paths= -goto :eof - -:filter_path -IF "%ERL_LIBS%"=="" ( - set "ERL_LIBS=%~dp1%~n1%~x1" -) else ( - set "ERL_LIBS=!ERL_LIBS!;%~dp1%~n1%~x1" -) -goto :eof - -:filter_paths_done - REM Environment cleanup set BOOT_MODULE= set CONFIG_FILE= @@ -509,6 +151,6 @@ set SCRIPT_NAME= set TDP0= REM ##--- End of overridden variables -REM + REM # Since we source this elsewhere, don't accidentally stop execution REM true diff --git a/deps/rabbit/scripts/rabbitmq-plugins.bat b/deps/rabbit/scripts/rabbitmq-plugins.bat index 37b2391504f23fc6bd07727b2b8129fc4835b64c..450ee2718bb88b00d8cd16366951f42ebca6c1c7 100644 --- a/deps/rabbit/scripts/rabbitmq-plugins.bat +++ b/deps/rabbit/scripts/rabbitmq-plugins.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-plugins" !STAR! @@ -61,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-queues.bat b/deps/rabbit/scripts/rabbitmq-queues.bat index 45b1ded339e2c6b803c7de9d524063de95dab1c7..db273d14ad4ee0c3ccccc543927f8bcec6559675 100644 --- a/deps/rabbit/scripts/rabbitmq-queues.bat +++ b/deps/rabbit/scripts/rabbitmq-queues.bat @@ -49,11 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ --nodename !RABBITMQ_NODENAME! ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-queues" !STAR! @@ -62,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-rel b/deps/rabbit/scripts/rabbitmq-rel new file mode 100755 index 0000000000000000000000000000000000000000..a96ec7876482b17eb38fe3c03ac1fe260e99d59c --- /dev/null +++ b/deps/rabbit/scripts/rabbitmq-rel @@ -0,0 +1,58 @@ +#!/usr/bin/env escript +%% vim:ft=erlang:sw=2:et: + +main(["show-rel"]) -> + Rel = get_rel(), + io:format("~p.~n", [Rel]); +main(["gen-boot"]) -> + generate_rel(), + generate_boot(). + +get_rel() -> + ok = application:load(rabbit), + Apps0 = get_apps(rabbit), + Apps1 = lists:sort( + fun + (_, rabbitmq_prelaunch) -> false; + (rabbitmq_prelaunch, _) -> true; + (_, mnesia) -> true; + (mnesia, _) -> false; + (A, B) -> A =< B + end, Apps0), + Apps = [{App, get_vsn(App)} || App <- Apps1], + + ERTSVersion = erlang:system_info(version), + RabbitVersion = get_vsn(rabbit), + + {release, + {"RabbitMQ", RabbitVersion}, + {erts, ERTSVersion}, + Apps}. + +get_apps(App) -> + ok = load_app(App), + {ok, DirectDeps} = application:get_key(App, applications), + lists:umerge( + [lists:usort(get_apps(Dep)) || Dep <- DirectDeps] ++ + [lists:usort([kernel, stdlib, sasl, App, mnesia])]). + +load_app(App) -> + case application:load(App) of + ok -> ok; + {error, {already_loaded, App}} -> ok + end. + +generate_rel() -> + Rel = get_rel(), + io:format("~p.~n", [Rel]), + Output = io_lib:format("~p.~n", [Rel]), + ok = file:write_file("rabbit.rel", Output). + +generate_boot() -> + Options = [local, {path, code:get_path()}], + ok = systools:make_script("rabbit", Options). + +get_vsn(App) -> + load_app(App), + {ok, Vsn} = application:get_key(App, vsn), + Vsn. diff --git a/deps/rabbit/scripts/rabbitmq-server b/deps/rabbit/scripts/rabbitmq-server index 8f9a057ac17002b5a740f5948135ba02c15602d1..0976c5566ab6fae61f0574d225acd914ab603c84 100755 --- a/deps/rabbit/scripts/rabbitmq-server +++ b/deps/rabbit/scripts/rabbitmq-server @@ -1,4 +1,5 @@ #!/bin/sh +# vim:sw=4:et: ## The contents of this file are subject to the Mozilla Public License ## Version 1.1 (the "License"); you may not use this file except in ## compliance with the License. You may obtain a copy of the License @@ -19,247 +20,18 @@ set -e # Get default settings with user overrides for (RABBITMQ_) # Non-empty defaults should be set in rabbitmq-env -. `dirname $0`/rabbitmq-env - -RABBITMQ_START_RABBIT= -[ "x" = "x$RABBITMQ_ALLOW_INPUT" ] && RABBITMQ_START_RABBIT=" -noinput" -[ "x" = "x$RABBITMQ_NODE_ONLY" ] && RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -s $RABBITMQ_BOOT_MODULE boot " - -case "$(uname -s)" in - CYGWIN*) # we make no attempt to record the cygwin pid; rabbitmqctl wait - # will not be able to make sense of it anyway - ;; - *) # When -detached is passed, we don't write the pid, since it'd be the - # wrong one - detached="" - for opt in "$@"; do - if [ "$opt" = "-detached" ]; then - detached="true" - fi - done - if [ $detached ]; then - echo "Warning: PID file not written; -detached was passed." 1>&2 - else - RABBITMQ_PID_DIR="$(dirname ${RABBITMQ_PID_FILE})" - EX_CANTCREAT=73 # Standard exit code from sysexits(2) - if ! mkdir -p "$RABBITMQ_PID_DIR"; then - # Better diagnostics - 'mkdir -p' reports only the first directory in chain that - # it fails to create - echo "Failed to create directory: $RABBITMQ_PID_DIR" - exit $EX_CANTCREAT - fi - if ! echo $$ > ${RABBITMQ_PID_FILE}; then - # Better diagnostics - otherwise the only report in logs is about failed 'echo' - # command, but without any other details: neither what script has failed nor what - # file output was redirected to. - echo "Failed to write pid file: ${RABBITMQ_PID_FILE}" - exit $EX_CANTCREAT - fi - fi -esac - -RABBITMQ_EBIN_ROOT="${RABBITMQ_HOME}/ebin" +SCRIPTS_DIR=$(dirname "$0") +. "$SCRIPTS_DIR/rabbitmq-env" [ "$NOTIFY_SOCKET" ] && RUNNING_UNDER_SYSTEMD=true -get_noex() { - if [ "x" = "x${1}" ]; then - echo "" - else - local BASENAME=$(basename $1) - local DIRNAME=$(dirname $1) - if [ "x." = "x${DIRNAME}" ]; then - echo "${BASENAME%.*}" - else - echo "${DIRNAME}/${BASENAME%.*}" - fi - fi -} - -# Check that advanced config file has the .config extension -# Add .config extension if it's empty - -RABBITMQ_ADVANCED_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_ADVANCED_CONFIG_FILE}) -if [ "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - -o "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then - RABBITMQ_ADVANCED_CONFIG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" -fi - - -RABBITMQ_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_FILE}) -# Extension is not specified. -# Determine config type from file - -if [ "${RABBITMQ_CONFIG_FILE_NOEX}" = "${RABBITMQ_CONFIG_FILE}" ]; then - if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.config" ]; then - if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then - # Both files exist. Print a warning. - _rmq_env_pwarn 'Both old (.config) and new (.conf) format config files exist.' \ - "Using the old format config file: ${RABBITMQ_CONFIG_FILE_NOEX}.config" \ - 'Please update your config files to the new format and remove the old file.' - fi - RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.config" - elif [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then - RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.conf" - else - if [ -f ${RABBITMQ_ADVANCED_CONFIG_FILE} ]; then - _rmq_env_pwarn "Using RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" - fi - # No config file exist. Use advanced config for -config arg. - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" - RABBITMQ_CONFIG_FILE="" - fi -fi - -# Set the -config argument. -# The -config argument should not have extension. -# the file should exist -# the file should be a valid erlang term file - -# Config file extension is .config -if [ "${RABBITMQ_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_CONFIG_FILE}" -# Config file extension is .conf -elif [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" -elif [ "x" != "x${RABBITMQ_CONFIG_FILE}" \ - -a "${RABBITMQ_CONFIG_FILE_NOEX}" != "${RABBITMQ_CONFIG_FILE}" ]; then - # Config file has an extension, but it's neither .conf or .config - _rmq_env_perr "Wrong extension for RABBITMQ_CONFIG_FILE: ${RABBITMQ_CONFIG_FILE}" \ - 'The extension should be either .conf or .config' - exit 64 # EX_USAGE -fi - -RABBITMQ_CONFIG_ARG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_ARG_FILE}) - -if [ "${RABBITMQ_CONFIG_ARG_FILE_NOEX}.config" != "${RABBITMQ_CONFIG_ARG_FILE}" ]; then - if [ "${RABBITMQ_CONFIG_ARG_FILE}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then - _rmq_env_perr "Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - 'The extension should be .config' - exit 64 # EX_USAGE - else - # We should never got here, but still there should be some explanation - _rmq_env_perr "Wrong extension for ${RABBITMQ_CONFIG_ARG_FILE}" - 'The extension should be .config' - exit 64 # EX_USAGE - fi -fi - -# Set -config if the file exists -if [ -f "${RABBITMQ_CONFIG_ARG_FILE}" ]; then - RABBITMQ_CONFIG_ARG="-config ${RABBITMQ_CONFIG_ARG_FILE_NOEX}" -fi - -# Set -conf and other generated config parameters -if [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then - if [ ! -d ${RABBITMQ_SCHEMA_DIR} ]; then - mkdir -p "${RABBITMQ_SCHEMA_DIR}" - fi - - if [ ! -d ${RABBITMQ_GENERATED_CONFIG_DIR} ]; then - mkdir -p "${RABBITMQ_GENERATED_CONFIG_DIR}" - fi - - cp -f "${RABBITMQ_HOME}/priv/schema/rabbit.schema" "${RABBITMQ_SCHEMA_DIR}" - - RABBITMQ_GENERATED_CONFIG_ARG="-conf ${RABBITMQ_CONFIG_FILE} \ - -conf_dir ${RABBITMQ_GENERATED_CONFIG_DIR} \ - -conf_script_dir `dirname $0` \ - -conf_schema_dir ${RABBITMQ_SCHEMA_DIR} - -conf_advanced ${RABBITMQ_ADVANCED_CONFIG_FILE}" -fi - -set +e - -# `net_kernel:start/1` will fail in `longnames` mode when erlang is -# unable to determine FQDN of a node (with a dot in it). But `erl` -# itself has some magic that still allow it to start when you -# explicitly specify host (a.la `erl -name test@localhost`). -# -# It's not possible to communicate with this node, unless it's a -# connection initiator. But as prelaunch IS an initiator, it doesn't -# matter what we actually put here. But `localhost` sounds good -# enough. -RABBITMQ_PRELAUNCH_NODENAME="rabbitmqprelaunch${$}@localhost" - -# NOTIFY_SOCKET is needed here to prevent epmd from impersonating the -# success of our startup sequence to systemd. -NOTIFY_SOCKET= \ -RABBITMQ_CONFIG_FILE=$RABBITMQ_CONFIG_FILE \ -ERL_CRASH_DUMP=$ERL_CRASH_DUMP \ -RABBITMQ_CONFIG_ARG_FILE=$RABBITMQ_CONFIG_ARG_FILE \ -RABBITMQ_DIST_PORT=$RABBITMQ_DIST_PORT \ - ${ERL_DIR}erl -pa "$RABBITMQ_EBIN_ROOT" \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput \ - -hidden \ - -s rabbit_prelaunch \ - ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ - ${RABBITMQ_NAME_TYPE} ${RABBITMQ_PRELAUNCH_NODENAME} \ - -conf_advanced "${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - -rabbit feature_flags_file "\"$RABBITMQ_FEATURE_FLAGS_FILE\"" \ - -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \ - -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \ - -extra "${RABBITMQ_NODENAME}" - -PRELAUNCH_RESULT=$? -if [ ${PRELAUNCH_RESULT} = 2 ] ; then - # dist port is mentioned in config, so do not set it - true -elif [ ${PRELAUNCH_RESULT} = 0 ] ; then - # dist port is not mentioned in the config file, we can set it - RABBITMQ_DIST_ARG="-kernel inet_dist_listen_min ${RABBITMQ_DIST_PORT} -kernel inet_dist_listen_max ${RABBITMQ_DIST_PORT}" -else - exit ${PRELAUNCH_RESULT} -fi - -# The default allocation strategy RabbitMQ is using was introduced -# in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -# this configuration. We therefore need to ensure that erl accepts -# these values before we can use them. -# -# The defaults are meant to reduce RabbitMQ's memory usage and help -# it reclaim memory at the cost of a slight decrease in performance -# (due to an increase in memory operations). These defaults can be -# overridden using the RABBITMQ_SERVER_ERL_ARGS variable. RABBITMQ_DEFAULT_ALLOC_ARGS="+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30" -${ERL_DIR}erl ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput -eval 'halt(0)' 2>/dev/null - -if [ $? != 0 ] ; then - RABBITMQ_DEFAULT_ALLOC_ARGS= -fi - -set -e - -RABBITMQ_LISTEN_ARG= -[ "x" != "x$RABBITMQ_NODE_PORT" ] && [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_LISTEN_ARG="-rabbit tcp_listeners [{\""${RABBITMQ_NODE_IP_ADDRESS}"\","${RABBITMQ_NODE_PORT}"}]" - -# If $RABBITMQ_LOGS is '-', send all log messages to stdout. This is -# particularly useful for Docker images. - -if [ "$RABBITMQ_LOGS" = '-' ]; then - SASL_ERROR_LOGGER=tty - RABBIT_LAGER_HANDLER=tty - RABBITMQ_LAGER_HANDLER_UPGRADE=tty -else - SASL_ERROR_LOGGER=false - RABBIT_LAGER_HANDLER='"'${RABBITMQ_LOGS}'"' - RABBITMQ_LAGER_HANDLER_UPGRADE='"'${RABBITMQ_UPGRADE_LOG}'"' -fi - # Bump ETS table limit to 50000 if [ "x" = "x$ERL_MAX_ETS_TABLES" ]; then ERL_MAX_ETS_TABLES=50000 fi -# we need to turn off path expansion because some of the vars, notably -# RABBITMQ_SERVER_ERL_ARGS, contain terms that look like globs and -# there is no other way of preventing their expansion. -set -f - # Lazy initialization of threed pool size - if it wasn't set # explicitly. This parameter is only needed when server is starting, # so it makes no sense to do this calculations in rabbitmq-env or @@ -267,70 +39,16 @@ set -f ensure_thread_pool_size() { if [ -z "${RABBITMQ_IO_THREAD_POOL_SIZE}" ]; then RABBITMQ_IO_THREAD_POOL_SIZE=$( - ${ERL_DIR}erl -pa "$RABBITMQ_EBIN_ROOT" \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput \ - -s rabbit_misc report_default_thread_pool_size + erl \ + -noinput \ + -boot "${CLEAN_BOOT_FILE}" \ + -s rabbit_misc report_default_thread_pool_size ) fi } -start_rabbitmq_server() { - # The arguments to -pa are in this order because they are *pre*-pended - # to the code path. Since we want RABBITMQ_SERVER_CODE_PATH to precede - # RABBITMQ_EBIN_ROOT, it must come as the second argument here. - # https://github.com/rabbitmq/rabbitmq-server/issues/1777 - ensure_thread_pool_size - check_start_params && - RABBITMQ_CONFIG_FILE=$RABBITMQ_CONFIG_FILE \ - ERL_MAX_ETS_TABLES=$ERL_MAX_ETS_TABLES \ - ERL_CRASH_DUMP=$ERL_CRASH_DUMP \ - exec ${ERL_DIR}erl \ - -pa "$RABBITMQ_EBIN_ROOT" "$RABBITMQ_SERVER_CODE_PATH" \ - ${RABBITMQ_START_RABBIT} \ - ${RABBITMQ_NAME_TYPE} ${RABBITMQ_NODENAME} \ - -boot "${SASL_BOOT_FILE}" \ - ${RABBITMQ_CONFIG_ARG} \ - ${RABBITMQ_GENERATED_CONFIG_ARG} \ - +W w \ - +A ${RABBITMQ_IO_THREAD_POOL_SIZE} \ - ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ - ${RABBITMQ_SERVER_ERL_ARGS} \ - +K true \ - -kernel inet_default_connect_options "[{nodelay,true}]" \ - ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ - ${RABBITMQ_LISTEN_ARG} \ - -sasl errlog_type error \ - -sasl sasl_error_logger "$SASL_ERROR_LOGGER" \ - -rabbit lager_log_root "\"$RABBITMQ_LOG_BASE\"" \ - -rabbit lager_default_file "$RABBIT_LAGER_HANDLER" \ - -rabbit lager_upgrade_file "$RABBITMQ_LAGER_HANDLER_UPGRADE" \ - -rabbit feature_flags_file "\"$RABBITMQ_FEATURE_FLAGS_FILE\"" \ - -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \ - -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \ - -rabbit plugins_expand_dir "\"$RABBITMQ_PLUGINS_EXPAND_DIR\"" \ - -os_mon start_cpu_sup false \ - -os_mon start_disksup false \ - -os_mon start_memsup false \ - -mnesia dir "\"${RABBITMQ_MNESIA_DIR}\"" \ - -ra data_dir "\"${RABBITMQ_QUORUM_DIR}\"" \ - ${RABBITMQ_SERVER_START_ARGS} \ - ${RABBITMQ_DIST_ARG} \ - "$@" -} - -stop_rabbitmq_server() { - RABBITMQCTL="$(dirname "$0")/rabbitmqctl" - - if ${RABBITMQCTL} -n ${RABBITMQ_NODENAME} status >/dev/null 2>&1; then - ${RABBITMQCTL} -n ${RABBITMQ_NODENAME} stop - fi -} - check_start_params() { check_not_empty RABBITMQ_BOOT_MODULE - check_not_empty RABBITMQ_NAME_TYPE - check_not_empty RABBITMQ_NODENAME check_not_empty SASL_BOOT_FILE check_not_empty RABBITMQ_IO_THREAD_POOL_SIZE } @@ -346,6 +64,61 @@ check_not_empty() { fi } +start_rabbitmq_server() { + set -e + + _rmq_env_set_erl_libs + ensure_thread_pool_size + + RABBITMQ_START_RABBIT= + [ "x" = "x$RABBITMQ_ALLOW_INPUT" ] && RABBITMQ_START_RABBIT=" -noinput" + if test -z "$RABBITMQ_NODE_ONLY"; then + if test "$USE_RABBIT_BOOT_SCRIPT"; then + # TODO: This is experimental and undocumented at this point. + # It is here just to do simple checks while playing with how + # RabbitMQ is started. + "$SCRIPTS_DIR/rabbitmq-rel" gen-boot + SASL_BOOT_FILE=rabbit + test -f "$SASL_BOOT_FILE.boot" + RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -init_debug" + else + RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -s $RABBITMQ_BOOT_MODULE boot" + fi + fi + + # We need to turn off path expansion because some of the vars, + # notably RABBITMQ_SERVER_ERL_ARGS, contain terms that look like + # globs and there is no other way of preventing their expansion. + set -f + + export ERL_MAX_ETS_TABLES \ + SYS_PREFIX + + check_start_params + + exec erl \ + -pa "$RABBITMQ_SERVER_CODE_PATH" \ + ${RABBITMQ_START_RABBIT} \ + -boot "${SASL_BOOT_FILE}" \ + +W w \ + +K true \ + +A ${RABBITMQ_IO_THREAD_POOL_SIZE} \ + ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ + ${RABBITMQ_SERVER_ERL_ARGS} \ + ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ + ${RABBITMQ_SERVER_START_ARGS} \ + -lager crash_log false \ + -lager handlers '[]' \ + "$@" +} + +stop_rabbitmq_server() { + if test "$rabbitmq_server_pid"; then + kill -TERM "$rabbitmq_server_pid" + wait "$rabbitmq_server_pid" || true + fi +} + if [ "$RABBITMQ_ALLOW_INPUT" -o "$RUNNING_UNDER_SYSTEMD" -o "$detached" ]; then # Run erlang VM directly, completely replacing current shell # process - so the pid file written in the code above will be @@ -382,13 +155,13 @@ else # # The behaviors below should remain consistent with the # equivalent signal handlers in the Erlang code - # (see src/rabbit_os_signal_handler.erl). + # (see apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl). trap '' HUP TSTP CONT trap "stop_rabbitmq_server; exit 0" TERM trap "stop_rabbitmq_server; exit 130" INT start_rabbitmq_server "$@" & - rabbitmq_server_pid=$! + export rabbitmq_server_pid=$! # Block until RabbitMQ exits or a signal is caught. # Waits for last command (which is start_rabbitmq_server) @@ -406,5 +179,5 @@ else # force that statement to succeed and the signal handler to properly # execute. Because the statement below has an exit code of 0, the # signal handler has to restate the expected exit code. - wait $rabbitmq_server_pid || true + wait "$rabbitmq_server_pid" || true fi diff --git a/deps/rabbit/scripts/rabbitmq-server.bat b/deps/rabbit/scripts/rabbitmq-server.bat index d2b5b9013b19bc9db5b49f05560242b87fd96bee..0be62f35cd7abf026539a46c3cb2e048720b8d01 100644 --- a/deps/rabbit/scripts/rabbitmq-server.bat +++ b/deps/rabbit/scripts/rabbitmq-server.bat @@ -46,163 +46,8 @@ if not exist "!ERLANG_HOME!\bin\erl.exe" ( exit /B 1 ) -set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin - -CALL :convert_forward_slashes "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE -CALL :get_noex "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE_NOEX - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config - REM Try to create advanced config file, if it doesn't exist - REM It still can fail to be created, but at least not for default install - if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE_NOEX - -if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - rem Both files exist. Print a warning - echo "WARNING: Both old (.config) and new (.conf) format config files exist." - echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config" - echo "WARNING: Please update your config files to the new format and remove the old file" - ) - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config - ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf - ) else ( - rem No config file exist. Use advanced config for -config arg. - if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - ) - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -rem Set the -config argument. -rem The -config argument should not have extension. -rem the file should exist -rem the file should be a valid erlang term file - -rem Config file extension is .config -if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE! -) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! -) else if not "" == "!RABBITMQ_CONFIG_FILE!" ( - if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" ( - rem Config file has an extension, but it's neither .conf or .config - echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!" - echo "ERROR: extension should be either .conf or .config" - exit /B 1 - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE_NOEX - -if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" ( - if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) else ( - rem We should never got here, but still there should be some explanation - echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) -) - -rem Set -config if the file exists -if exist !RABBITMQ_CONFIG_ARG_FILE! ( - set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!" -) - -rem Set -conf and other generated config parameters -if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - if not exist "!RABBITMQ_SCHEMA_DIR!" ( - mkdir "!RABBITMQ_SCHEMA_DIR!" - ) - - if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" ( - mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!" - ) - - copy /Y "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" - - set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE:\=/!" ^ - -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR:\=/!" ^ - -conf_script_dir "!CONF_SCRIPT_DIR:\=/!" ^ - -conf_schema_dir "!RABBITMQ_SCHEMA_DIR:\=/!" ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE:\=/!" -) - -"!ERLANG_HOME!\bin\erl.exe" ^ - -pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -hidden ^ - -s rabbit_prelaunch ^ - !RABBITMQ_NAME_TYPE! rabbitmqprelaunch!RANDOM!!TIME:~9!@localhost ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^ - -rabbit feature_flags_file "!RABBITMQ_FEATURE_FLAGS_FILE!" ^ - -rabbit enabled_plugins_file "!RABBITMQ_ENABLED_PLUGINS_FILE!" ^ - -rabbit plugins_dir "!RABBITMQ_PLUGINS_DIR!" ^ - -extra "!RABBITMQ_NODENAME!" - -if ERRORLEVEL 2 ( - rem dist port mentioned in config, do not attempt to set it -) else if ERRORLEVEL 1 ( - exit /B 1 -) else ( - set RABBITMQ_DIST_ARG=-kernel inet_dist_listen_min !RABBITMQ_DIST_PORT! -kernel inet_dist_listen_max !RABBITMQ_DIST_PORT! -) - -rem The default allocation strategy RabbitMQ is using was introduced -rem in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -rem this configuration. We therefore need to ensure that erl accepts -rem these values before we can use them. -rem -rem The defaults are meant to reduce RabbitMQ's memory usage and help -rem it reclaim memory at the cost of a slight decrease in performance -rem (due to an increase in memory operations). These defaults can be -rem overridden using the RABBITMQ_SERVER_ERL_ARGS variable. - set RABBITMQ_DEFAULT_ALLOC_ARGS=+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30 -"!ERLANG_HOME!\bin\erl.exe" ^ - !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -eval "halt(0)" - -if ERRORLEVEL 1 ( - set RABBITMQ_DEFAULT_ALLOC_ARGS= -) - -set RABBITMQ_LISTEN_ARG= -if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_LISTEN_ARG=-rabbit tcp_listeners [{"\"!RABBITMQ_NODE_IP_ADDRESS!\"","!RABBITMQ_NODE_PORT!"}] - ) -) - -REM If !RABBITMQ_LOGS! is '-', send all log messages to stdout. This is -REM particularly useful for Docker images. - -if "!RABBITMQ_LOGS!" == "-" ( - set SASL_ERROR_LOGGER=tty - set RABBIT_LAGER_HANDLER=tty - set RABBITMQ_LAGER_HANDLER_UPGRADE=tty -) else ( - set SASL_ERROR_LOGGER=false - set RABBIT_LAGER_HANDLER="\"!RABBITMQ_LOGS:\=/!\"" - set RABBITMQ_LAGER_HANDLER_UPGRADE="\"!RABBITMQ_UPGRADE_LOG:\=/!\"" -) - set RABBITMQ_START_RABBIT= if "!RABBITMQ_ALLOW_INPUT!"=="" ( set RABBITMQ_START_RABBIT=!RABBITMQ_START_RABBIT! -noinput @@ -217,9 +62,6 @@ if "!RABBITMQ_IO_THREAD_POOL_SIZE!"=="" ( set ENV_OK=true CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! -CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! -CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! - if "!ENV_OK!"=="false" ( EXIT /b 78 @@ -232,35 +74,16 @@ if "!RABBITMQ_ALLOW_INPUT!"=="" ( ) "!ERLANG_HOME!\bin\!ERL_CMD!" ^ --pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ --boot start_sasl ^ !RABBITMQ_START_RABBIT! ^ -!RABBITMQ_CONFIG_ARG! ^ -!RABBITMQ_GENERATED_CONFIG_ARG! ^ -!RABBITMQ_NAME_TYPE! !RABBITMQ_NODENAME! ^ +-boot "!SASL_BOOT_FILE!" ^ +W w ^ +A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^ !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ !RABBITMQ_SERVER_ERL_ARGS! ^ -!RABBITMQ_LISTEN_ARG! ^ --kernel inet_default_connect_options "[{nodelay, true}]" ^ !RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^ --sasl errlog_type error ^ --sasl sasl_error_logger !SASL_ERROR_LOGGER! ^ --rabbit lager_log_root "\"!RABBITMQ_LOG_BASE:\=/!\"" ^ --rabbit lager_default_file !RABBIT_LAGER_HANDLER! ^ --rabbit lager_upgrade_file !RABBITMQ_LAGER_HANDLER_UPGRADE! ^ --rabbit feature_flags_file "\"!RABBITMQ_FEATURE_FLAGS_FILE:\=/!\"" ^ --rabbit enabled_plugins_file "\"!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!\"" ^ --rabbit plugins_dir "\"!RABBITMQ_PLUGINS_DIR:\=/!\"" ^ --rabbit plugins_expand_dir "\"!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!\"" ^ --mnesia dir "\"!RABBITMQ_MNESIA_DIR:\=/!\"" ^ --os_mon start_cpu_sup false ^ --os_mon start_disksup false ^ --os_mon start_memsup false ^ --ra data_dir \""!RABBITMQ_QUORUM_DIR:\=/!"\" ^ !RABBITMQ_SERVER_START_ARGS! ^ -!RABBITMQ_DIST_ARG! ^ +-lager crash_log false ^ +-lager handlers "[]" ^ !STAR! if ERRORLEVEL 1 ( @@ -277,17 +100,6 @@ if "%~2"=="" ( ) EXIT /B 0 -:get_noex -set "%~2=%~dpn1" -EXIT /B 0 - -rem Convert unix style path separators into windows style path separators -rem needed for comparing with _NOEX variables -rem rabbitmq/rabbitmq-server#1962 -:convert_forward_slashes -set "%~2=%~dpf1" -EXIT /B 0 - endlocal endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-service.bat b/deps/rabbit/scripts/rabbitmq-service.bat index c110e7507dab58fbcbbd9286f3eb218d6a6da0a7..ab539e8c5c7b460a1de13a1452b21502f89d8b25 100644 --- a/deps/rabbit/scripts/rabbitmq-service.bat +++ b/deps/rabbit/scripts/rabbitmq-service.bat @@ -35,6 +35,38 @@ REM Get default settings with user overrides for (RABBITMQ_) REM Non-empty defaults should be set in rabbitmq-env call "%TDP0%\rabbitmq-env.bat" %~n0 +REM Check for the short names here too +if "!RABBITMQ_USE_LONGNAME!"=="true" ( + set RABBITMQ_NAME_TYPE=-name + set NAMETYPE=longnames +) else ( + if "!USE_LONGNAME!"=="true" ( + set RABBITMQ_USE_LONGNAME=true + set RABBITMQ_NAME_TYPE=-name + set NAMETYPE=longnames + ) else ( + set RABBITMQ_USE_LONGNAME=false + set RABBITMQ_NAME_TYPE=-sname + set NAMETYPE=shortnames + ) +) + +REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} +if "!RABBITMQ_NODENAME!"=="" ( + if "!NODENAME!"=="" ( + REM We use Erlang to query the local hostname because + REM !COMPUTERNAME! and Erlang may return different results. + REM Start erl with -sname to make sure epmd is started. + call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -sname rabbit-prelaunch-epmd -eval "init:stop()." >nul 2>&1 + for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F + set RABBITMQ_NODENAME=rabbit@!HOSTNAME! + set HOSTNAME= + ) else ( + set RABBITMQ_NODENAME=!NODENAME! + ) +) +set NAMETYPE= + set STARVAR= shift :loop1 @@ -112,16 +144,6 @@ if not exist "!RABBITMQ_BASE!" ( echo Creating base directory !RABBITMQ_BASE! & mkdir "!RABBITMQ_BASE!" ) -set ENV_OK=true -CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! -CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! -CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! - - -if "!ENV_OK!"=="false" ( - EXIT /b 78 -) - "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" list !RABBITMQ_SERVICENAME! 2>NUL 1>NUL if errorlevel 1 ( "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" add !RABBITMQ_SERVICENAME! -internalservicename !RABBITMQ_SERVICENAME! @@ -129,165 +151,8 @@ if errorlevel 1 ( echo !RABBITMQ_SERVICENAME! service is already present - only updating service parameters ) -set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin - -CALL :convert_forward_slashes "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE -CALL :get_noex "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE_NOEX - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config - REM Try to create advanced config file, if it doesn't exist - REM It still can fail to be created, but at least not for default install - if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE_NOEX - -if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - rem Both files exist. Print a warning - echo "WARNING: Both old (.config) and new (.conf) format config files exist." - echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config" - echo "WARNING: Please update your config files to the new format and remove the old file" - ) - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config - ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf - ) else ( - rem No config file exist. Use advanced config for -config arg. - if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - ) - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -rem Set the -config argument. -rem The -config argument should not have extension. -rem the file should exist -rem the file should be a valid erlang term file - -rem Config file extension is .config -if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE! -) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! -) else if not "" == "!RABBITMQ_CONFIG_FILE!" ( - if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" ( - rem Config file has an extension, but it's neither .conf or .config - echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!" - echo "ERROR: extension should be either .conf or .config" - exit /B 1 - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE_NOEX - -if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" ( - if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) else ( - rem We should never got here, but still there should be some explanation - echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) -) - -rem Set -config if the file exists -if exist !RABBITMQ_CONFIG_ARG_FILE! ( - set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!" -) - -rem Set -conf and other generated config parameters -if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - if not exist "!RABBITMQ_SCHEMA_DIR!" ( - mkdir "!RABBITMQ_SCHEMA_DIR!" - ) - - if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" ( - mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!" - ) - - copy /Y "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" - - set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE:\=/!" ^ - -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR:\=/!" ^ - -conf_script_dir "!CONF_SCRIPT_DIR:\=/!" ^ - -conf_schema_dir "!RABBITMQ_SCHEMA_DIR:\=/!" ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE:\=/!" -) - -"!ERLANG_HOME!\bin\erl.exe" ^ - -pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -hidden ^ - -s rabbit_prelaunch ^ - !RABBITMQ_NAME_TYPE! rabbitmqprelaunch!RANDOM!!TIME:~9!@localhost ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^ - -rabbit feature_flags_file "!RABBITMQ_FEATURE_FLAGS_FILE!" ^ - -rabbit enabled_plugins_file "!RABBITMQ_ENABLED_PLUGINS_FILE!" ^ - -rabbit plugins_dir "!RABBITMQ_PLUGINS_DIR!" ^ - -extra "!RABBITMQ_NODENAME!" - -if ERRORLEVEL 3 ( - rem ERRORLEVEL means (or greater) so we need to catch all other failure - rem cases here - exit /B 1 -) else if ERRORLEVEL 2 ( - rem dist port mentioned in config, do not attempt to set it -) else if ERRORLEVEL 1 ( - exit /B 1 -) else ( - set RABBITMQ_DIST_ARG=-kernel inet_dist_listen_min !RABBITMQ_DIST_PORT! -kernel inet_dist_listen_max !RABBITMQ_DIST_PORT! -) - -rem The default allocation strategy RabbitMQ is using was introduced -rem in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -rem this configuration. We therefore need to ensure that erl accepts -rem these values before we can use them. -rem -rem The defaults are meant to reduce RabbitMQ's memory usage and help -rem it reclaim memory at the cost of a slight decrease in performance -rem (due to an increase in memory operations). These defaults can be -rem overridden using the RABBITMQ_SERVER_ERL_ARGS variable. - set RABBITMQ_DEFAULT_ALLOC_ARGS=+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30 -"!ERLANG_HOME!\bin\erl.exe" ^ - !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -eval "halt(0)" - -if ERRORLEVEL 1 ( - set RABBITMQ_DEFAULT_ALLOC_ARGS= -) - - -set RABBITMQ_LISTEN_ARG= -if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_LISTEN_ARG=-rabbit tcp_listeners "[{\"!RABBITMQ_NODE_IP_ADDRESS!\", !RABBITMQ_NODE_PORT!}]" - ) -) - -if "!RABBITMQ_LOGS!" == "-" ( - set SASL_ERROR_LOGGER=tty - set RABBIT_LAGER_HANDLER=tty - set RABBITMQ_LAGER_HANDLER_UPGRADE=tty -) else ( - set SASL_ERROR_LOGGER=false - set RABBIT_LAGER_HANDLER="\"!RABBITMQ_LOGS:\=/!\"" - set RABBITMQ_LAGER_HANDLER_UPGRADE="\"!RABBITMQ_UPGRADE_LOG:\=/!\"" -) - set RABBITMQ_START_RABBIT= if "!RABBITMQ_NODE_ONLY!"=="" ( set RABBITMQ_START_RABBIT=-s "!RABBITMQ_BOOT_MODULE!" boot @@ -301,45 +166,46 @@ if "!RABBITMQ_SERVICE_RESTART!"=="" ( set RABBITMQ_SERVICE_RESTART=restart ) +set ENV_OK=true +CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! +CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! +CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! + +if "!ENV_OK!"=="false" ( + EXIT /b 78 +) + set ERLANG_SERVICE_ARGUMENTS= ^ --pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ --boot start_sasl ^ !RABBITMQ_START_RABBIT! ^ -!RABBITMQ_CONFIG_ARG! ^ -!RABBITMQ_GENERATED_CONFIG_ARG! ^ +-boot "!SASL_BOOT_FILE!" ^ +W w ^ +A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^ !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ !RABBITMQ_SERVER_ERL_ARGS! ^ -!RABBITMQ_LISTEN_ARG! ^ --kernel inet_default_connect_options "[{nodelay,true}]" ^ !RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^ --sasl errlog_type error ^ --sasl sasl_error_logger false ^ --rabbit lager_log_root "\"!RABBITMQ_LOG_BASE:\=/!\"" ^ --rabbit lager_default_file !RABBIT_LAGER_HANDLER! ^ --rabbit lager_upgrade_file !RABBITMQ_LAGER_HANDLER_UPGRADE! ^ --rabbit feature_flags_file "\"!RABBITMQ_FEATURE_FLAGS_FILE:\=/!\"" ^ --rabbit enabled_plugins_file "\"!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!\"" ^ --rabbit plugins_dir "\"!RABBITMQ_PLUGINS_DIR:\=/!\"" ^ --rabbit plugins_expand_dir "\"!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!\"" ^ --rabbit windows_service_config "\"!RABBITMQ_CONFIG_FILE:\=/!\"" ^ --mnesia dir "\"!RABBITMQ_MNESIA_DIR:\=/!\"" ^ --os_mon start_cpu_sup false ^ --os_mon start_disksup false ^ --os_mon start_memsup false ^ --ra data_dir \""!RABBITMQ_QUORUM_DIR:\=/!"\" ^ !RABBITMQ_SERVER_START_ARGS! ^ -!RABBITMQ_DIST_ARG! ^ +-lager crash_log false ^ +-lager handlers "[]" ^ !STARVAR! set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:\=\\! set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:"=\"! +rem We resolve %APPDATA% at install time so that the user's %APPDATA% +rem is passed to `rabbit_env` at runtime (instead of the service's +rem %APPDAT%). +rem +rem The goal is to keep the same behavior as when RabbitMQ data +rem locations were decided in `rabbitmq-env.bat` (sourced by this +rem script), even if now, we compute everything in `rabbit_env` at +rem runtime. +rem +rem We may revisit this in the future so that no data is stored in a +rem user-specific directory. "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" set !RABBITMQ_SERVICENAME! ^ -onfail !RABBITMQ_SERVICE_RESTART! ^ -machine "!ERLANG_SERVICE_MANAGER_PATH!\erl.exe" ^ --env ERL_CRASH_DUMP="!RABBITMQ_BASE:\=/!/erl_crash.dump" ^ +-env APPDATA="!APPDATA!" ^ -env ERL_LIBS="!ERL_LIBS!" ^ -env ERL_MAX_ETS_TABLES="!ERL_MAX_ETS_TABLES!" ^ -env ERL_MAX_PORTS="!ERL_MAX_PORTS!" ^ @@ -386,17 +252,6 @@ if "%~2"=="" ( ) EXIT /B 0 -:get_noex -set "%~2=%~dpn1" -EXIT /B 0 - -rem Convert unix style path separators into windows style path separators -rem needed for comparing with _NOEX variables -rem rabbitmq/rabbitmq-server#1962 -:convert_forward_slashes -set "%~2=%~dpf1" -EXIT /B 0 - endlocal endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-upgrade.bat b/deps/rabbit/scripts/rabbitmq-upgrade.bat index b5bcd9e7dc0d2223469aa64b3d488b4638fcb8ef..8dde2c90a12f4a411e7e20ffe1433e9ffc747784 100644 --- a/deps/rabbit/scripts/rabbitmq-upgrade.bat +++ b/deps/rabbit/scripts/rabbitmq-upgrade.bat @@ -49,11 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ --nodename !RABBITMQ_NODENAME! ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-upgrade" !STAR! @@ -62,5 +57,6 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) -endlocal +EXIT /B 0 + endlocal diff --git a/deps/rabbit/scripts/rabbitmqctl.bat b/deps/rabbit/scripts/rabbitmqctl.bat index bc6fa3bb73ab35fe231945ec5bd1e9af48329bc5..2d5c6db78197fc3a4cef4f78b1ab84cfe7a29f17 100644 --- a/deps/rabbit/scripts/rabbitmqctl.bat +++ b/deps/rabbit/scripts/rabbitmqctl.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmqctl" !STAR! @@ -61,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/src/gatherer.erl b/deps/rabbit/src/gatherer.erl index 52efef2bbbca9816d63702d7dde571927cda82e5..99a487ed12a0b6e409a588ae0a64d509bec0d5ae 100644 --- a/deps/rabbit/src/gatherer.erl +++ b/deps/rabbit/src/gatherer.erl @@ -56,6 +56,7 @@ start_link() -> -spec stop(pid()) -> 'ok'. stop(Pid) -> + unlink(Pid), gen_server2:call(Pid, stop, infinity). -spec fork(pid()) -> 'ok'. diff --git a/deps/rabbit/src/rabbit.erl b/deps/rabbit/src/rabbit.erl index 721078dd5f55f7dee04f95da9360dfcb12a54537..e11e288536c05a59decfe921779e309b89c2fa98 100644 --- a/deps/rabbit/src/rabbit.erl +++ b/deps/rabbit/src/rabbit.erl @@ -33,17 +33,13 @@ -export([product_info/0, product_name/0, product_version/0, + base_product_name/0, + base_product_version/0, motd_file/0, motd/0]). --export([log_locations/0, config_files/0, decrypt_config/2]). %% for testing and mgmt-agent +-export([log_locations/0, config_files/0]). %% for testing and mgmt-agent -export([is_booted/1, is_booted/0, is_booting/1, is_booting/0]). --ifdef(TEST). - --export([start_logger/0]). - --endif. - %%--------------------------------------------------------------------------- %% Boot steps. -export([maybe_insert_default_data/0, boot_delegate/0, recover/0]). @@ -99,12 +95,27 @@ {enables, worker_pool}]}). -rabbit_boot_step({worker_pool, - [{description, "worker pool"}, + [{description, "default worker pool"}, {mfa, {rabbit_sup, start_supervisor_child, [worker_pool_sup]}}, {requires, pre_boot}, {enables, external_infrastructure}]}). +-rabbit_boot_step({definition_import_worker_pool, + [{description, "dedicated worker pool for definition import"}, + {mfa, {rabbit_definitions, boot, []}}, + {requires, external_infrastructure}, + {enables, load_core_definitions}]}). + +%% We want to A) make sure we apply definitions before the node begins serving +%% traffic and B) in fact do it before empty_db_check (so the defaults will not +%% get created if we don't need 'em). +-rabbit_boot_step({load_core_definitions, + [{description, "imports definitions"}, + {mfa, {rabbit_definitions, maybe_load_definitions, []}}, + {requires, [recovery, definition_import_worker_pool]}, + {enables, empty_db_check}]}). + -rabbit_boot_step({external_infrastructure, [{description, "external infrastructure ready"}]}). @@ -192,15 +203,6 @@ {requires, [core_initialized]}, {enables, routing_ready}]}). -%% We want to A) make sure we apply definitions before the node begins serving -%% traffic and B) in fact do it before empty_db_check (so the defaults will not -%% get created if we don't need 'em). --rabbit_boot_step({load_core_definitions, - [{description, "imports definitions"}, - {mfa, {rabbit_definitions, maybe_load_definitions, []}}, - {requires, recovery}, - {enables, empty_db_check}]}). - -rabbit_boot_step({empty_db_check, [{description, "empty DB check"}, {mfa, {?MODULE, maybe_insert_default_data, []}}, @@ -246,11 +248,6 @@ {requires, pre_flight} ]}). --rabbit_boot_step({os_signal_handler, - [{description, "registers an OS signal handler"}, - {mfa, {rabbit_os_signal_handler, boot, []}}, - {requires, pre_flight}]}). - -rabbit_boot_step({direct_client, [{description, "direct client"}, {mfa, {rabbit_direct, boot, []}}, @@ -272,7 +269,7 @@ -include("rabbit_framing.hrl"). -include("rabbit.hrl"). --define(APPS, [os_mon, mnesia, rabbit_common, ra, sysmon_handler, rabbit]). +-define(APPS, [os_mon, mnesia, rabbit_common, rabbitmq_prelaunch, ra, sysmon_handler, rabbit]). -define(ASYNC_THREADS_WARNING_THRESHOLD, 8). @@ -292,225 +289,179 @@ %%---------------------------------------------------------------------------- -ensure_application_loaded() -> - %% We end up looking at the rabbit app's env for HiPE and log - %% handling, so it needs to be loaded. But during the tests, it - %% may end up getting loaded twice, so guard against that. - case application:load(rabbit) of - ok -> ok; - {error, {already_loaded, rabbit}} -> ok - end. - -spec start() -> 'ok'. start() -> - start_it(fun() -> - %% We do not want to upgrade mnesia after just - %% restarting the app. - ok = ensure_application_loaded(), - HipeResult = rabbit_hipe:maybe_hipe_compile(), - ok = start_logger(), - rabbit_hipe:log_hipe_result(HipeResult), - Apps = load_all_apps(), - rabbit_feature_flags:initialize_registry(), - rabbit_node_monitor:prepare_cluster_status_files(), - rabbit_mnesia:check_cluster_consistency(), - broker_start(Apps) - end). + %% start() vs. boot(): we want to throw an error in start(). + start_it(temporary). -spec boot() -> 'ok'. boot() -> - start_it(fun() -> - ensure_config(), - ok = ensure_application_loaded(), - HipeResult = rabbit_hipe:maybe_hipe_compile(), - ok = start_logger(), - rabbit_hipe:log_hipe_result(HipeResult), - Apps = load_all_apps(), - rabbit_feature_flags:initialize_registry(), - rabbit_node_monitor:prepare_cluster_status_files(), - ok = rabbit_upgrade:maybe_upgrade_mnesia(), - %% It's important that the consistency check happens after - %% the upgrade, since if we are a secondary node the - %% primary node will have forgotten us - rabbit_mnesia:check_cluster_consistency(), - broker_start(Apps) - end). - -ensure_config() -> - case rabbit_config:validate_config_files() of - ok -> ok; - {error, {ErrFmt, ErrArgs}} -> - throw({error, {check_config_file, ErrFmt, ErrArgs}}) + %% start() vs. boot(): we want the node to exit in boot(). Because + %% applications are started with `transient`, any error during their + %% startup will abort the node. + start_it(transient). + +run_prelaunch_second_phase() -> + %% Finish the prelaunch phase started by the `rabbitmq_prelaunch` + %% application. + %% + %% The first phase was handled by the `rabbitmq_prelaunch` + %% application. It was started in one of the following way: + %% - from an Erlang release boot script; + %% - from the rabbit:boot/0 or rabbit:start/0 functions. + %% + %% The `rabbitmq_prelaunch` application creates the context map from + %% the environment and the configuration files early during Erlang + %% VM startup. Once it is done, all application environments are + %% configured (in particular `mnesia` and `ra`). + %% + %% This second phase depends on other modules & facilities of + %% RabbitMQ core. That's why we need to run it now, from the + %% `rabbit` application start function. + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. See `rabbit_prelaunch` for an explanation. + %% + %% This is the second assertion, just in case Mnesia is started + %% between the two prelaunch phases. + rabbit_prelaunch:assert_mnesia_is_stopped(), + + %% Get the context created by `rabbitmq_prelaunch` then proceed + %% with all steps in this phase. + #{initial_pass := IsInitialPass} = + Context = rabbit_prelaunch:get_context(), + + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [2/2] (initial pass) =="); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [2/2] =="), + ok end, - case rabbit_config:prepare_and_use_config() of - {error, {generation_error, Error}} -> - throw({error, {generate_config_file, Error}}); - ok -> ok - end. -load_all_apps() -> - Plugins = rabbit_plugins:setup(), - ToBeLoaded = Plugins ++ ?APPS, - app_utils:load_applications(ToBeLoaded), - ToBeLoaded. - -broker_start(Apps) -> - start_loaded_apps(Apps), - maybe_sd_notify(), - ok = rabbit_lager:broker_is_started(), - ok = log_broker_started(rabbit_plugins:strictly_plugins(rabbit_plugins:active())). - -%% Try to send systemd ready notification if it makes sense in the -%% current environment. standard_error is used intentionally in all -%% logging statements, so all this messages will end in systemd -%% journal. -maybe_sd_notify() -> - case sd_notify_ready() of + %% 1. Enabled plugins file. + ok = rabbit_prelaunch_enabled_plugins_file:setup(Context), + + %% 2. Feature flags registry. + ok = rabbit_prelaunch_feature_flags:setup(Context), + + %% 3. Logging. + ok = rabbit_prelaunch_logging:setup(Context), + + case IsInitialPass of + true -> + %% 4. HiPE compilation. + ok = rabbit_prelaunch_hipe:setup(Context); false -> - io:format(standard_error, "systemd READY notification failed, beware of timeouts~n", []); - _ -> ok - end. + end, -sd_notify_ready() -> - case {os:type(), os:getenv("NOTIFY_SOCKET")} of - {{win32, _}, _} -> - true; - {_, [_|_]} -> %% Non-empty NOTIFY_SOCKET, give it a try - sd_notify_legacy() orelse sd_notify_socat(); - _ -> - true - end. + %% 5. Clustering. + ok = rabbit_prelaunch_cluster:setup(Context), -sd_notify_data() -> - "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". - -sd_notify_legacy() -> - case code:load_file(sd_notify) of - {module, sd_notify} -> - SDNotify = sd_notify, - SDNotify:sd_notify(0, sd_notify_data()), - true; - {error, _} -> - false - end. + %% Start Mnesia now that everything is ready. + rabbit_log_prelaunch:debug("Starting Mnesia"), + ok = mnesia:start(), -%% socat(1) is the most portable way the sd_notify could be -%% implemented in erlang, without introducing some NIF. Currently the -%% following issues prevent us from implementing it in a more -%% reasonable way: -%% - systemd-notify(1) is unstable for non-root users -%% - erlang doesn't support unix domain sockets. -%% -%% Some details on how we ended with such a solution: -%% https://github.com/rabbitmq/rabbitmq-server/issues/664 -sd_notify_socat() -> - case sd_current_unit() of - {ok, Unit} -> - io:format(standard_error, "systemd unit for activation check: \"~s\"~n", [Unit]), - sd_notify_socat(Unit); - _ -> - false - end. + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch DONE =="), -socat_socket_arg("@" ++ AbstractUnixSocket) -> - "abstract-sendto:" ++ AbstractUnixSocket; -socat_socket_arg(UnixSocket) -> - "unix-sendto:" ++ UnixSocket. - -sd_open_port() -> - open_port( - {spawn_executable, os:find_executable("socat")}, - [{args, [socat_socket_arg(os:getenv("NOTIFY_SOCKET")), "STDIO"]}, - use_stdio, out]). - -sd_notify_socat(Unit) -> - try sd_open_port() of - Port -> - Port ! {self(), {command, sd_notify_data()}}, - Result = sd_wait_activation(Port, Unit), - port_close(Port), - Result - catch - Class:Reason -> - io:format(standard_error, "Failed to start socat ~p:~p~n", [Class, Reason]), - false - end. + case IsInitialPass of + true -> rabbit_prelaunch:initial_pass_finished(); + false -> ok + end, + ok. -sd_current_unit() -> - CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), - case catch re:run(CmdOut, "([-.@0-9a-zA-Z]+)", [unicode, {capture, all_but_first, list}]) of - {'EXIT', _} -> - error; - {match, [Unit]} -> - {ok, Unit}; - _ -> - error +start_it(StartType) -> + case spawn_boot_marker() of + {ok, Marker} -> + T0 = erlang:timestamp(), + rabbit_log:info("RabbitMQ is asked to start...", []), + try + {ok, _} = application:ensure_all_started(rabbitmq_prelaunch, + StartType), + {ok, _} = application:ensure_all_started(rabbit, + StartType), + ok = wait_for_ready_or_stopped(), + + T1 = erlang:timestamp(), + rabbit_log_prelaunch:debug( + "Time to start RabbitMQ: ~p µs", + [timer:now_diff(T1, T0)]), + stop_boot_marker(Marker), + ok + catch + error:{badmatch, Error}:_ -> + stop_boot_marker(Marker), + case StartType of + temporary -> throw(Error); + _ -> exit(Error) + end + end; + {already_booting, Marker} -> + stop_boot_marker(Marker), + ok end. -sd_wait_activation(Port, Unit) -> - case os:find_executable("systemctl") of - false -> - io:format(standard_error, "'systemctl' unavailable, falling back to sleep~n", []), - timer:sleep(5000), - true; +wait_for_ready_or_stopped() -> + ok = rabbit_boot_state:wait_for(ready, ?BOOT_FINISH_TIMEOUT), + case rabbit_boot_state:get() of + ready -> + ok; _ -> - sd_wait_activation(Port, Unit, 10) + ok = rabbit_boot_state:wait_for(stopped, ?BOOT_FINISH_TIMEOUT), + rabbit_prelaunch:get_stop_reason() end. -sd_wait_activation(_, _, 0) -> - io:format(standard_error, "Service still in 'activating' state, bailing out~n", []), - false; -sd_wait_activation(Port, Unit, AttemptsLeft) -> - case os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'") of - "ActiveState=activating\n" -> - timer:sleep(1000), - sd_wait_activation(Port, Unit, AttemptsLeft - 1); - "ActiveState=" ++ _ -> - true; - _ = Err-> - io:format(standard_error, "Unexpected status from systemd ~p~n", [Err]), - false - end. - -start_it(StartFun) -> +spawn_boot_marker() -> + %% Compatibility with older RabbitMQ versions: + %% We register a process doing nothing to indicate that RabbitMQ is + %% booting. This is checked by `is_booting(Node)` on a remote node. Marker = spawn_link(fun() -> receive stop -> ok end end), case catch register(rabbit_boot, Marker) of - true -> try - case is_running() of - true -> ok; - false -> StartFun() - end - catch Class:Reason -> - boot_error(Class, Reason) - after - unlink(Marker), - Marker ! stop, - %% give the error loggers some time to catch up - timer:sleep(100) - end; - _ -> unlink(Marker), - Marker ! stop + true -> {ok, Marker}; + _ -> {already_booting, Marker} end. +stop_boot_marker(Marker) -> + unlink(Marker), + Marker ! stop, + ok. + -spec stop() -> 'ok'. stop() -> - ProductName = product_name(), - case whereis(rabbit_boot) of - undefined -> ok; - _ -> - rabbit_log:info("~s hasn't finished starting yet. Waiting for startup to finish before stopping...", [ProductName]), - ok = wait_for_boot_to_finish(node()) - end, - rabbit_log:info("~s is asked to stop...~n", [ProductName]), - Apps = ?APPS ++ rabbit_plugins:active(), + case wait_for_ready_or_stopped() of + ok -> + case rabbit_boot_state:get() of + ready -> + Product = product_name(), + rabbit_log:info("~s is asked to stop...", [Product]), + do_stop(), + rabbit_log:info( + "Successfully stopped ~s and its dependencies", + [Product]), + ok; + stopped -> + ok + end; + _ -> + ok + end. + +do_stop() -> + Apps0 = ?APPS ++ rabbit_plugins:active(), + %% We ensure that Mnesia is stopped last (or more exactly, after rabbit). + Apps1 = app_utils:app_dependency_order(Apps0, true) -- [mnesia], + Apps = [mnesia | Apps1], %% this will also perform unregistration with the peer discovery backend %% as needed - stop_apps(app_utils:app_dependency_order(Apps, true)), - rabbit_log:info("Successfully stopped ~s and its dependencies~n", [ProductName]). + stop_apps(Apps). -spec stop_and_halt() -> no_return(). @@ -549,166 +500,26 @@ start_apps(Apps) -> -spec start_apps([app_name()], #{app_name() => restart_type()}) -> 'ok'. +%% TODO: start_apps/2 and is now specific to plugins. This function +%% should be moved over `rabbit_plugins`, along with stop_apps/1, once +%% the latter stops using app_utils as well. + start_apps(Apps, RestartTypes) -> + false = lists:member(rabbit, Apps), %% Assertion. + %% We need to load all applications involved in order to be able to + %% find new feature flags. app_utils:load_applications(Apps), ok = rabbit_feature_flags:refresh_feature_flags_after_app_load(Apps), - start_loaded_apps(Apps, RestartTypes). - -start_loaded_apps(Apps) -> - start_loaded_apps(Apps, #{}). - -start_loaded_apps(Apps, RestartTypes) -> - ensure_sysmon_handler_app_config(), - %% make Ra use a custom logger that dispatches to lager instead of the - %% default OTP logger - application:set_env(ra, logger_module, rabbit_log_ra_shim), - %% use a larger segments size for queues - case application:get_env(ra, segment_max_entries) of - undefined -> - application:set_env(ra, segment_max_entries, 32768); - _ -> - ok - end, - case application:get_env(ra, wal_max_size_bytes) of - undefined -> - application:set_env(ra, wal_max_size_bytes, 536870912); %% 5 * 2 ^ 20 - _ -> - ok - end, - ConfigEntryDecoder = case application:get_env(rabbit, config_entry_decoder) of - undefined -> - []; - {ok, Val} -> - Val - end, - PassPhrase = case proplists:get_value(passphrase, ConfigEntryDecoder) of - prompt -> - IoDevice = get_input_iodevice(), - io:setopts(IoDevice, [{echo, false}]), - PP = lists:droplast(io:get_line(IoDevice, - "\nPlease enter the passphrase to unlock encrypted " - "configuration entries.\n\nPassphrase: ")), - io:setopts(IoDevice, [{echo, true}]), - io:format(IoDevice, "~n", []), - PP; - {file, Filename} -> - {ok, File} = file:read_file(Filename), - [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), - PP; - PP -> - PP - end, - Algo = { - proplists:get_value(cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), - proplists:get_value(hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), - proplists:get_value(iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), - PassPhrase - }, - decrypt_config(Apps, Algo), - OrderedApps = app_utils:app_dependency_order(Apps, false), - case lists:member(rabbit, Apps) of - false -> rabbit_boot_steps:run_boot_steps(Apps); %% plugin activation - true -> ok %% will run during start of rabbit app - end, - ok = app_utils:start_applications(OrderedApps, - handle_app_error(could_not_start), - RestartTypes). - -%% rabbitmq/rabbitmq-server#952 -%% This function is to be called after configuration has been optionally generated -%% and the sysmon_handler application loaded, but not started. It will ensure that -%% sane defaults are used for configuration settings that haven't been set by the -%% user -ensure_sysmon_handler_app_config() -> - Defaults = [ - {process_limit, 100}, - {port_limit, 100}, - {gc_ms_limit, 0}, - {schedule_ms_limit, 0}, - {heap_word_limit, 0}, - {busy_port, false}, - {busy_dist_port, true} - ], - lists:foreach(fun({K, V}) -> - case application:get_env(sysmon_handler, K) of - undefined -> - application:set_env(sysmon_handler, K, V); - _ -> - ok - end - end, Defaults). - -%% This function retrieves the correct IoDevice for requesting -%% input. The problem with using the default IoDevice is that -%% the Erlang shell prevents us from getting the input. -%% -%% Instead we therefore look for the io process used by the -%% shell and if it can't be found (because the shell is not -%% started e.g with -noshell) we use the 'user' process. -%% -%% This function will not work when either -oldshell or -noinput -%% options are passed to erl. -get_input_iodevice() -> - case whereis(user) of - undefined -> user; - User -> - case group:interfaces(User) of - [] -> - user; - [{user_drv, Drv}] -> - case user_drv:interfaces(Drv) of - [] -> - user; - [{current_group, IoDevice}] -> - IoDevice - end - end - end. - -decrypt_config([], _) -> - ok; -decrypt_config([App|Apps], Algo) -> - decrypt_app(App, application:get_all_env(App), Algo), - decrypt_config(Apps, Algo). - -decrypt_app(_, [], _) -> - ok; -decrypt_app(App, [{Key, Value}|Tail], Algo) -> - try begin - case decrypt(Value, Algo) of - Value -> - ok; - NewValue -> - application:set_env(App, Key, NewValue) - end - end - catch - exit:{bad_configuration, config_entry_decoder} -> - exit({bad_configuration, config_entry_decoder}); - _:Msg -> - rabbit_log:info("Error while decrypting key '~p'. Please check encrypted value, passphrase, and encryption configuration~n", [Key]), - exit({decryption_error, {key, Key}, Msg}) - end, - decrypt_app(App, Tail, Algo). - -decrypt({encrypted, _}, {_, _, _, undefined}) -> - exit({bad_configuration, config_entry_decoder}); -decrypt({encrypted, EncValue}, {Cipher, Hash, Iterations, Password}) -> - rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, Password, EncValue); -decrypt(List, Algo) when is_list(List) -> - decrypt_list(List, Algo, []); -decrypt(Value, _) -> - Value. - -%% We make no distinction between strings and other lists. -%% When we receive a string, we loop through each element -%% and ultimately return the string unmodified, as intended. -decrypt_list([], _, Acc) -> - lists:reverse(Acc); -decrypt_list([{Key, Value}|Tail], Algo, Acc) when Key =/= encrypted -> - decrypt_list(Tail, Algo, [{Key, decrypt(Value, Algo)}|Acc]); -decrypt_list([Value|Tail], Algo, Acc) -> - decrypt_list(Tail, Algo, [decrypt(Value, Algo)|Acc]). + rabbit_prelaunch_conf:decrypt_config(Apps), + lists:foreach( + fun(App) -> + RestartType = maps:get(App, RestartTypes, temporary), + ok = rabbit_boot_steps:run_boot_steps([App]), + case application:ensure_all_started(App, RestartType) of + {ok, _} -> ok; + {error, Reason} -> throw({could_not_start, App, Reason}) + end + end, Apps). -spec stop_apps([app_name()]) -> 'ok'. @@ -738,11 +549,15 @@ handle_app_error(Term) -> is_booting() -> is_booting(node()). +is_booting(Node) when Node =:= node() -> + case rabbit_boot_state:get() of + booting -> true; + _ -> false + end; is_booting(Node) -> - case rpc:call(Node, erlang, whereis, [rabbit_boot]) of + case rpc:call(Node, rabbit, is_booting, []) of {badrpc, _} = Err -> Err; - undefined -> false; - P when is_pid(P) -> true + Ret -> Ret end. @@ -808,9 +623,6 @@ do_wait_for_boot_to_start(Node, IterationsLeft) -> ok end. -wait_for_boot_to_finish(Node) -> - wait_for_boot_to_finish(Node, false, ?BOOT_FINISH_TIMEOUT). - wait_for_boot_to_finish(Node, PrintProgressReports) -> wait_for_boot_to_finish(Node, PrintProgressReports, ?BOOT_FINISH_TIMEOUT). @@ -860,7 +672,7 @@ maybe_print_boot_progress(true, IterationsLeft) -> {memory, any()}]. status() -> - Version = product_version(), + Version = base_product_version(), S1 = [{pid, list_to_integer(os:getpid())}, %% The timeout value used is twice that of gen_server:call/2. {running_applications, rabbit_misc:which_applications()}, @@ -907,7 +719,16 @@ status() -> [] end, S7 = [{totals, Totals}], - S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7. + S8 = lists:filter( + fun + ({product_base_name, _}) -> true; + ({product_base_version, _}) -> true; + ({product_name, _}) -> true; + ({product_version, _}) -> true; + (_) -> false + end, + maps:to_list(product_info())), + S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7 ++ S8. alarms() -> Alarms = rabbit_misc:with_exit_handler(rabbit_misc:const([]), @@ -930,17 +751,22 @@ total_queue_count() -> end, 0, rabbit_vhost:list_names()). -%% TODO this only determines if the rabbit application has started, -%% not if it is running, never mind plugins. It would be nice to have -%% more nuance here. - -spec is_running() -> boolean(). is_running() -> is_running(node()). -spec is_running(node()) -> boolean(). -is_running(Node) -> rabbit_nodes:is_process_running(Node, rabbit). +is_running(Node) when Node =:= node() -> + case rabbit_boot_state:get() of + ready -> true; + _ -> false + end; +is_running(Node) -> + case rpc:call(Node, rabbit, is_running, []) of + true -> true; + _ -> false + end. is_booted() -> is_booted(node()). @@ -977,10 +803,13 @@ rotate_logs() -> %% lager_file_backend. We should use a proper API, when %% it's added to Lager. %% - %% FIXME: This message is asynchronous, therefore this - %% entire call is asynchronous: at the end of this - %% function, we can't guaranty the rotation is completed. - [SinkName ! {rotate, FileName} || FileName <- FileNames], + %% FIXME: This call is effectively asynchronous: at the + %% end of this function, we can't guaranty the rotation + %% is completed. + [ok = gen_event:call(SinkName, + {lager_file_backend, FileName}, + rotate, + infinity) || FileName <- FileNames], lager:log(SinkName, info, self(), "Log file re-opened after forced rotation", []), Acc @@ -996,106 +825,157 @@ rotate_logs() -> {'ok',pid()}. start(normal, []) -> - case erts_version_check() of - ok -> - rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n ~s~n ~s~n", - [product_name(), product_version(), rabbit_misc:otp_release(), - ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]), - log_motd(), - {ok, SupPid} = rabbit_sup:start_link(), - true = register(rabbit, self()), - print_banner(), - log_banner(), - warn_if_kernel_config_dubious(), - warn_if_disc_io_options_dubious(), - rabbit_boot_steps:run_boot_steps(), - {ok, SupPid}; - {error, {erlang_version_too_old, - {found, OTPRel, ERTSVer}, - {required, ?OTP_MINIMUM, ?ERTS_MINIMUM}}} -> - Msg = "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " - "minimum required version is ~s (erts ~s)", - Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], - rabbit_log:error(Msg, Args), - %% also print to stderr to make this more visible - io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), - {error, {erlang_version_too_old, rabbit_misc:format("Erlang ~s or later is required, started on ~s", [?OTP_MINIMUM, OTPRel])}}; - Error -> + %% Reset boot state and clear the stop reason again (it was already + %% made in rabbitmq_prelaunch). + %% + %% This is important if the previous startup attempt failed after + %% rabbitmq_prelaunch was started and the application is still + %% running. + rabbit_boot_state:set(booting), + rabbit_prelaunch:clear_stop_reason(), + + try + run_prelaunch_second_phase(), + + ProductInfo = product_info(), + case ProductInfo of + #{product_overridden := true, + product_base_name := BaseName, + product_base_version := BaseVersion} -> + rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n Based on ~s ~s~n ~s~n ~s~n", + [product_name(), product_version(), rabbit_misc:otp_release(), + BaseName, BaseVersion, + ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]); + _ -> + rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n ~s~n ~s~n", + [product_name(), product_version(), rabbit_misc:otp_release(), + ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]) + end, + log_motd(), + {ok, SupPid} = rabbit_sup:start_link(), + + %% Compatibility with older RabbitMQ versions + required by + %% rabbit_node_monitor:notify_node_up/0: + %% + %% We register the app process under the name `rabbit`. This is + %% checked by `is_running(Node)` on a remote node. The process + %% is also monitord by rabbit_node_monitor. + %% + %% The process name must be registered *before* running the boot + %% steps: that's when rabbit_node_monitor will set the process + %% monitor up. + %% + %% Note that plugins were not taken care of at this point + %% either. + rabbit_log_prelaunch:debug( + "Register `rabbit` process (~p) for rabbit_node_monitor", + [self()]), + true = register(rabbit, self()), + + print_banner(), + log_banner(), + warn_if_kernel_config_dubious(), + warn_if_disc_io_options_dubious(), + %% We run `rabbit` boot steps only for now. Plugins boot steps + %% will be executed as part of the postlaunch phase after they + %% are started. + rabbit_boot_steps:run_boot_steps([rabbit]), + run_postlaunch_phase(), + {ok, SupPid} + catch + throw:{error, _} = Error -> + mnesia:stop(), + rabbit_prelaunch_errors:log_error(Error), + rabbit_prelaunch:set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + mnesia:stop(), + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + rabbit_prelaunch:set_stop_reason(Error), + rabbit_boot_state:set(stopped), Error end. +run_postlaunch_phase() -> + spawn(fun() -> do_run_postlaunch_phase() end). + +do_run_postlaunch_phase() -> + %% Once RabbitMQ itself is started, we need to run a few more steps, + %% in particular start plugins. + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Postlaunch phase =="), + + try + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Plugins =="), + + rabbit_log_prelaunch:debug("Setting plugins up"), + %% `Plugins` contains all the enabled plugins, plus their + %% dependencies. The order is important: dependencies appear + %% before plugin which depend on them. + Plugins = rabbit_plugins:setup(), + rabbit_log_prelaunch:debug( + "Starting the following plugins: ~p", [Plugins]), + %% We can load all plugins and refresh their feature flags at + %% once, because it does not involve running code from the + %% plugins. + app_utils:load_applications(Plugins), + ok = rabbit_feature_flags:refresh_feature_flags_after_app_load( + Plugins), + %% However, we want to run their boot steps and actually start + %% them one by one, to ensure a dependency is fully started + %% before a plugin which depends on it gets a chance to start. + lists:foreach( + fun(Plugin) -> + ok = rabbit_boot_steps:run_boot_steps([Plugin]), + case application:ensure_all_started(Plugin) of + {ok, _} -> ok; + Error -> throw(Error) + end + end, Plugins), + + rabbit_log_prelaunch:debug("Marking ~s as running", [product_name()]), + rabbit_boot_state:set(ready), + + ok = rabbit_lager:broker_is_started(), + ok = log_broker_started( + rabbit_plugins:strictly_plugins(rabbit_plugins:active())) + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + rabbit_prelaunch:set_stop_reason(Error), + do_stop(); + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + rabbit_prelaunch:set_stop_reason(Error), + do_stop() + end. + prep_stop(State) -> - rabbit_peer_discovery:maybe_unregister(), - State. + rabbit_boot_state:set(stopping), + rabbit_peer_discovery:maybe_unregister(), + State. -spec stop(_) -> 'ok'. -stop(_State) -> +stop(State) -> ok = rabbit_alarm:stop(), ok = case rabbit_mnesia:is_clustered() of true -> ok; false -> rabbit_table:clear_ram_only_tables() end, + case State of + [] -> rabbit_prelaunch:set_stop_reason(normal); + _ -> rabbit_prelaunch:set_stop_reason(State) + end, + rabbit_boot_state:set(stopped), ok. --spec boot_error(term(), not_available | [tuple()]) -> no_return(). - -boot_error(_, {could_not_start, rabbit, {{timeout_waiting_for_tables, _}, _}}) -> - AllNodes = rabbit_mnesia:cluster_nodes(all), - Suffix = "~nBACKGROUND~n==========~n~n" - "This cluster node was shut down while other nodes were still running.~n" - "To avoid losing data, you should start the other nodes first, then~n" - "start this one. To force this node to start, first invoke~n" - "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" - "cluster nodes after this one was shut down may be lost.~n", - {Err, Nodes} = - case AllNodes -- [node()] of - [] -> {"Timeout contacting cluster nodes. Since RabbitMQ was" - " shut down forcefully~nit cannot determine which nodes" - " are timing out.~n" ++ Suffix, []}; - Ns -> {rabbit_misc:format( - "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, [Ns]), - Ns} - end, - log_boot_error_and_exit( - timeout_waiting_for_tables, - "~n" ++ Err ++ rabbit_nodes:diagnostics(Nodes), []); -boot_error(_, {error, {cannot_log_to_file, unknown, Reason}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to initialised logger: ~p~n", - [Reason]); -boot_error(_, {error, {cannot_log_to_file, LogFile, - {cannot_create_parent_dirs, _, Reason}}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to create parent directory for log file at '~s', reason: ~p~n", - [LogFile, Reason]); -boot_error(_, {error, {cannot_log_to_file, LogFile, Reason}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to open log file at '~s', reason: ~p~n", - [LogFile, Reason]); -boot_error(_, {error, {generate_config_file, Error}}) -> - log_boot_error_and_exit(generate_config_file, - "~nConfig file generation failed:~n~s" - "In case the setting comes from a plugin, make sure that the plugin is enabled.~n" - "Alternatively remove the setting from the config.~n", - [Error]); -boot_error(Class, Reason) -> - LogLocations = log_locations(), - log_boot_error_and_exit( - Reason, - "~nError description:~s" - "~nLog file(s) (may contain more information):~n" ++ - lists:flatten([" ~s~n" || _ <- lists:seq(1, length(LogLocations))]), - [lager:pr_stacktrace(erlang:get_stacktrace(), {Class, Reason})] ++ - LogLocations). - --spec log_boot_error_and_exit(_, _, _) -> no_return(). -log_boot_error_and_exit(Reason, Format, Args) -> - rabbit_log:error(Format, Args), - io:format(standard_error, "~nBOOT FAILED~n===========~n" ++ Format ++ "~n", Args), - timer:sleep(1000), - exit(Reason). - %%--------------------------------------------------------------------------- %% boot step functions @@ -1155,10 +1035,6 @@ insert_default_data() -> %%--------------------------------------------------------------------------- %% logging -start_logger() -> - rabbit_lager:start_logger(), - ok. - -spec log_locations() -> [rabbit_lager:log_location()]. log_locations() -> rabbit_lager:log_locations(). @@ -1190,25 +1066,29 @@ log_broker_started(Plugins) -> rabbit_log:info(Message), io:format(" completed with ~p plugins.~n", [length(Plugins)]). -erts_version_check() -> - ERTSVer = erlang:system_info(version), - OTPRel = rabbit_misc:otp_release(), - case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of - true when ?ERTS_MINIMUM =/= ERTSVer -> - ok; - true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> - %% When a critical regression or bug is found, a new OTP - %% release can be published without changing the ERTS - %% version. For instance, this is the case with R16B03 and - %% R16B03-1. - %% - %% In this case, we compare the release versions - %% alphabetically. - ok; - _ -> {error, {erlang_version_too_old, - {found, OTPRel, ERTSVer}, - {required, ?OTP_MINIMUM, ?ERTS_MINIMUM}}} - end. +-define(RABBIT_TEXT_LOGO, + "~n ## ## ~s ~s" + "~n ## ##" + "~n ########## ~s" + "~n ###### ##" + "~n ########## ~s"). +-define(FG8_START, "\033[38;5;202m"). +-define(BG8_START, "\033[48;5;202m"). +-define(FG32_START, "\033[38;2;255;102;0m"). +-define(BG32_START, "\033[48;2;255;102;0m"). +-define(C_END, "\033[0m"). +-define(RABBIT_8BITCOLOR_LOGO, + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END " \033[1m" ?FG8_START "~s" ?C_END " ~s" + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END + "~n " ?BG8_START " " ?C_END " ~s" + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END + "~n " ?BG8_START " " ?C_END " ~s"). +-define(RABBIT_32BITCOLOR_LOGO, + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END " \033[1m" ?FG32_START "~s" ?C_END " ~s" + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END + "~n " ?BG32_START " " ?C_END " ~s" + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END + "~n " ?BG32_START " " ?C_END " ~s"). print_banner() -> Product = product_name(), @@ -1219,6 +1099,19 @@ print_banner() -> (_, []) -> {"", ["(none)"]} end, + Logo = case rabbit_prelaunch:get_context() of + %% We use the colored logo only when running the + %% interactive shell and when colors are supported. + %% + %% Basically it means it will be used on Unix when + %% running "make run-broker" and that's about it. + #{os_type := {unix, darwin}, + interactive_shell := true, + output_supports_colors := true} -> ?RABBIT_8BITCOLOR_LOGO; + #{interactive_shell := true, + output_supports_colors := true} -> ?RABBIT_32BITCOLOR_LOGO; + _ -> ?RABBIT_TEXT_LOGO + end, %% padded list lines {LogFmt, LogLocations} = LineListFormatter("~n ~ts", log_locations()), {CfgFmt, CfgLocations} = LineListFormatter("~n ~ts", config_locations()), @@ -1234,11 +1127,7 @@ print_banner() -> || Line <- Lines], {"~n~ts", [Padded]} end, - io:format("~n ## ## ~s ~s" - "~n ## ##" - "~n ########## ~s" - "~n ###### ##" - "~n ########## ~s" + io:format(Logo ++ "~n" ++ MOTDFormat ++ "~n Doc guides: https://rabbitmq.com/documentation.html" @@ -1410,17 +1299,25 @@ validate_msg_store_io_batch_size_and_credit_disc_bound(CreditDiscBound, -spec product_name() -> string(). product_name() -> - #{name := ProductName} = product_info(), - ProductName. + case product_info() of + #{product_name := ProductName} -> ProductName; + #{product_base_name := BaseName} -> BaseName + end. -spec product_version() -> string(). product_version() -> - #{version := ProductVersion} = product_info(), - ProductVersion. + case product_info() of + #{product_version := ProductVersion} -> ProductVersion; + #{product_base_version := BaseVersion} -> BaseVersion + end. --spec product_info() -> #{name := string(), - version := string()}. +-spec product_info() -> #{product_base_name := string(), + product_base_version := string(), + product_overridden := boolean(), + product_name => string(), + product_version => string(), + otp_release := string()}. product_info() -> PTKey = {?MODULE, product}, @@ -1430,37 +1327,54 @@ product_info() -> persistent_term:get(PTKey) catch error:badarg -> - NameFromEnv = os:getenv("RABBITMQ_PRODUCT_NAME"), - VersionFromEnv = os:getenv("RABBITMQ_PRODUCT_VERSION"), - - Info = - if - NameFromEnv =/= false andalso - VersionFromEnv =/= false -> - #{name => NameFromEnv, - version => VersionFromEnv}; - true -> - Name = case NameFromEnv of - false -> - string_from_app_env( - product_name, - base_product_name()); - _ -> - NameFromEnv - end, - Version = case VersionFromEnv of - false -> - string_from_app_env( - product_version, - base_product_version()); - _ -> - VersionFromEnv - end, - #{name => Name, - version => Version} + BaseName = base_product_name(), + BaseVersion = base_product_version(), + Info0 = #{product_base_name => BaseName, + product_base_version => BaseVersion, + otp_release => rabbit_misc:otp_release()}, + + {NameFromEnv, VersionFromEnv} = + case rabbit_env:get_context() of + #{product_name := NFE, + product_version := VFE} -> {NFE, VFE}; + _ -> {undefined, undefined} end, - persistent_term:put(PTKey, Info), - Info + + Info1 = case NameFromEnv of + undefined -> + NameFromApp = string_from_app_env( + product_name, + undefined), + case NameFromApp of + undefined -> + Info0; + _ -> + Info0#{product_name => NameFromApp, + product_overridden => true} + end; + _ -> + Info0#{product_name => NameFromEnv, + product_overridden => true} + end, + + Info2 = case VersionFromEnv of + undefined -> + VersionFromApp = string_from_app_env( + product_version, + undefined), + case VersionFromApp of + undefined -> + Info1; + _ -> + Info1#{product_version => VersionFromApp, + product_overridden => true} + end; + _ -> + Info1#{product_version => VersionFromEnv, + product_overridden => true} + end, + persistent_term:put(PTKey, Info2), + Info2 end. string_from_app_env(Key, Default) -> @@ -1495,21 +1409,18 @@ motd_file() -> %% 1. The environment variable; %% 2. The `motd_file` configuration parameter; %% 3. The default value. - case os:getenv("RABBITMQ_MOTD_FILE") of - false -> - string_from_app_env(motd_file, default_motd_file()); - Val -> - Val - end. - -default_motd_file() -> - EnabledPluginsFile = rabbit_plugins:enabled_plugins_file(), - ConfigDir = filename:dirname(EnabledPluginsFile), - case os:type() of - {unix, _} -> - filename:join(ConfigDir, "motd"); - {win32, _} -> - filename:join(ConfigDir, "motd.txt") + Context = rabbit_env:get_context(), + case Context of + #{motd_file := File, + var_origins := #{motd_file := environment}} + when File =/= undefined -> + File; + _ -> + Default = case Context of + #{motd_file := File} -> File; + _ -> undefined + end, + string_from_app_env(motd_file, Default) end. motd() -> diff --git a/deps/rabbit/src/rabbit_access_control.erl b/deps/rabbit/src/rabbit_access_control.erl index a619b0bdf9a7d918574dedc661265bbdc00db35c..aa7b91c3f84d631723c8eb9ecf861a0ed39ea513 100644 --- a/deps/rabbit/src/rabbit_access_control.erl +++ b/deps/rabbit/src/rabbit_access_control.erl @@ -48,21 +48,17 @@ check_user_login(Username, AuthProps) -> %% extra auth properties like MQTT client id are in AuthProps {ok, Modules} = application:get_env(rabbit, auth_backends), R = lists:foldl( - fun ({ModN, ModZs0}, {refused, _, _, _}) -> - ModZs = case ModZs0 of - A when is_atom(A) -> [A]; - L when is_list(L) -> L - end, + fun (rabbit_auth_backend_cache=ModN, {refused, _, _, _}) -> + %% It is possible to specify authn/authz within the cache module settings, + %% so we have to do both auth steps here + %% See this rabbitmq-users discussion: + %% https://groups.google.com/d/topic/rabbitmq-users/ObqM7MQdA3I/discussion + try_authenticate_and_try_authorize(ModN, ModN, Username, AuthProps); + ({ModN, ModZs}, {refused, _, _, _}) -> %% Different modules for authN vs authZ. So authenticate %% with authN module, then if that succeeds do %% passwordless (i.e pre-authenticated) login with authZ. - case try_authenticate(ModN, Username, AuthProps) of - {ok, ModNUser = #auth_user{username = Username2}} -> - rabbit_log:debug("User '~s' authenticated successfully by backend ~s", [Username2, ModN]), - user(ModNUser, try_authorize(ModZs, Username2, AuthProps)); - Else -> - Else - end; + try_authenticate_and_try_authorize(ModN, ModZs, Username, AuthProps); (Mod, {refused, _, _, _}) -> %% Same module for authN and authZ. Just take the result %% it gives us @@ -80,6 +76,19 @@ check_user_login(Username, AuthProps) -> {refused, Username, "No modules checked '~s'", [Username]}, Modules), R. +try_authenticate_and_try_authorize(ModN, ModZs0, Username, AuthProps) -> + ModZs = case ModZs0 of + A when is_atom(A) -> [A]; + L when is_list(L) -> L + end, + case try_authenticate(ModN, Username, AuthProps) of + {ok, ModNUser = #auth_user{username = Username2}} -> + rabbit_log:debug("User '~s' authenticated successfully by backend ~s", [Username2, ModN]), + user(ModNUser, try_authorize(ModZs, Username2, AuthProps)); + Else -> + Else + end. + try_authenticate(Module, Username, AuthProps) -> case Module:user_login_authentication(Username, AuthProps) of {ok, AuthUser} -> {ok, AuthUser}; diff --git a/deps/rabbit/src/rabbit_amqqueue.erl b/deps/rabbit/src/rabbit_amqqueue.erl index f81c36829be22d8ecbaa030241435b7890ef3c89..7fb330e56c907a374eb32551540532307c614276 100644 --- a/deps/rabbit/src/rabbit_amqqueue.erl +++ b/deps/rabbit/src/rabbit_amqqueue.erl @@ -1088,7 +1088,8 @@ list_local_mirrored_classic_names() -> is_local_to_node(amqqueue:get_pid(Q), node()), is_replicated(Q)]. --spec list_local_mirrored_classic_without_synchronised_mirrors() -> [amqqueue:amqqueue()]. +-spec list_local_mirrored_classic_without_synchronised_mirrors() -> + [amqqueue:amqqueue()]. list_local_mirrored_classic_without_synchronised_mirrors() -> [ Q || Q <- list(), amqqueue:get_state(Q) =/= crashed, @@ -1097,7 +1098,8 @@ list_local_mirrored_classic_without_synchronised_mirrors() -> is_replicated(Q), not has_synchronised_mirrors_online(Q)]. --spec list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> [amqqueue:amqqueue()]. +-spec list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> + [#{binary => any()}]. list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> ClassicQs = list_local_mirrored_classic_without_synchronised_mirrors(), [begin diff --git a/deps/rabbit/src/rabbit_auth_backend_internal.erl b/deps/rabbit/src/rabbit_auth_backend_internal.erl index 3c63e3b3af4f692f6a8f291a475aa2ceff494599..67f360c79a5ea29c2679d641e830fe8248cb0eb4 100644 --- a/deps/rabbit/src/rabbit_auth_backend_internal.erl +++ b/deps/rabbit/src/rabbit_auth_backend_internal.erl @@ -494,11 +494,7 @@ put_user(User, Version, ActingUser) -> end, UserExists = case rabbit_auth_backend_internal:lookup_user(Username) of - %% expected {error, not_found} -> false; - %% shouldn't normally happen but worth guarding - %% against - {error, _} -> false; _ -> true end, diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl index 1e5e42fdf2d4e0e4f9b0caee0a4afc2d7ed4a5a5..3a4a43273c293955da16f9fd04d91251e231ea5c 100644 --- a/deps/rabbit/src/rabbit_channel.erl +++ b/deps/rabbit/src/rabbit_channel.erl @@ -122,7 +122,9 @@ %% Message content size limit max_message_size, consumer_timeout, - authz_context + authz_context, + %% defines how ofter gc will be executed + writer_gc_threshold }). -record(ch, {cfg :: #conf{}, @@ -169,9 +171,7 @@ delivery_flow, interceptor_state, queue_states, - tick_timer, - %% defines how ofter gc will be executed - writer_gc_threshold + tick_timer }). -define(QUEUE, lqueue). @@ -527,7 +527,8 @@ init([Channel, ReaderPid, WriterPid, ConnPid, ConnName, Protocol, User, VHost, consumer_prefetch = Prefetch, max_message_size = MaxMessageSize, consumer_timeout = ConsumerTimeout, - authz_context = OptionalVariables + authz_context = OptionalVariables, + writer_gc_threshold = GCThreshold }, limiter = Limiter, tx = none, @@ -546,8 +547,7 @@ init([Channel, ReaderPid, WriterPid, ConnPid, ConnName, Protocol, User, VHost, reply_consumer = none, delivery_flow = Flow, interceptor_state = undefined, - queue_states = #{}, - writer_gc_threshold = GCThreshold + queue_states = #{} }, State1 = State#ch{ interceptor_state = rabbit_channel_interceptor:init(State)}, @@ -1309,12 +1309,12 @@ handle_method(#'basic.publish'{exchange = ExchangeNameBin, user = #user{username = Username} = User, trace_state = TraceState, max_message_size = MaxMessageSize, - authz_context = AuthzContext + authz_context = AuthzContext, + writer_gc_threshold = GCThreshold }, tx = Tx, confirm_enabled = ConfirmEnabled, - delivery_flow = Flow, - writer_gc_threshold = GCThreshold + delivery_flow = Flow }) -> check_msg_size(Content, MaxMessageSize, GCThreshold), ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin), @@ -2693,9 +2693,9 @@ handle_deliver(ConsumerTag, AckRequired, #basic_message{exchange_name = ExchangeName, routing_keys = [RoutingKey | _CcRoutes], content = Content}}, - State = #ch{cfg = #conf{writer_pid = WriterPid}, - next_tag = DeliveryTag, - writer_gc_threshold = GCThreshold}) -> + State = #ch{cfg = #conf{writer_pid = WriterPid, + writer_gc_threshold = GCThreshold}, + next_tag = DeliveryTag}) -> Deliver = #'basic.deliver'{consumer_tag = ConsumerTag, delivery_tag = DeliveryTag, redelivered = Redelivered, diff --git a/deps/rabbit/src/rabbit_config.erl b/deps/rabbit/src/rabbit_config.erl index 6a2cc5c663b49fa093e9c1d8c0d366d533c945cd..1198035a7aab0d1e657ebd2721e22196ab217ac1 100644 --- a/deps/rabbit/src/rabbit_config.erl +++ b/deps/rabbit/src/rabbit_config.erl @@ -1,187 +1,30 @@ -module(rabbit_config). -export([ - generate_config_file/5, - prepare_and_use_config/0, - prepare_config/1, - update_app_config/1, - schema_dir/0, config_files/0, - get_advanced_config/0, - validate_config_files/0 + get_advanced_config/0 ]). +-export([schema_dir/0]). +-deprecated([{schema_dir, 0, eventually}]). + -export_type([config_location/0]). -type config_location() :: string(). -prepare_and_use_config() -> - case legacy_erlang_term_config_used() of - true -> - %% Use .config file - ok; - false -> - case prepare_config(get_confs()) of - ok -> - %% No .conf to generate from - ok; - {ok, GeneratedConfigFile} -> - %% Generated config file - update_app_config(GeneratedConfigFile); - {error, Err} -> - {error, Err} - end - end. - -%% we support both the classic Erlang term -%% config file (rabbitmq.config) as well as rabbitmq.conf -legacy_erlang_term_config_used() -> - case init:get_argument(config) of - error -> false; - {ok, [Config | _]} -> - ConfigFile = Config ++ ".config", - rabbit_file:is_file(ConfigFile) - andalso - get_advanced_config() == none - end. - get_confs() -> - case init:get_argument(conf) of - {ok, Confs} -> [ filename:rootname(Conf, ".conf") ++ ".conf" - || Conf <- Confs ]; - _ -> [] - end. - -prepare_config(Confs) -> - case {init:get_argument(conf_dir), init:get_argument(conf_script_dir)} of - {{ok, ConfDir}, {ok, ScriptDir}} -> - ConfFiles = [Conf || Conf <- Confs, - rabbit_file:is_file(Conf)], - case ConfFiles of - [] -> ok; - _ -> - case generate_config_file(ConfFiles, ConfDir, ScriptDir) of - {ok, GeneratedConfigFile} -> - {ok, GeneratedConfigFile}; - {error, Reason} -> - {error, Reason} - end - end; - _ -> ok - end. - -update_app_config(ConfigFile) -> - RunningApps = [ App || {App, _, _} <- application:which_applications() ], - LoadedApps = [ App || {App, _, _} <- application:loaded_applications() ], - {ok, [Config]} = file:consult(ConfigFile), - %% For application config to be updated, applications should - %% be unloaded first. - %% If an application is already running, print an error. - lists:foreach(fun({App, AppConfig}) -> - case lists:member(App, RunningApps) of - true -> - maybe_print_warning_for_running_app(App, AppConfig); - false -> - case lists:member(App, LoadedApps) of - true -> application:unload(App); - false -> ok - end - end - end, - Config), - maybe_set_net_ticktime(proplists:get_value(kernel, Config)), - ok = application_controller:change_application_data([], [ConfigFile]), - %% Make sure to load all the applications we're unloaded - lists:foreach(fun(App) -> application:load(App) end, LoadedApps), - ok. - -maybe_print_warning_for_running_app(kernel, Config) -> - ConfigWithoutSupportedEntry = proplists:delete(net_ticktime, Config), - case length(ConfigWithoutSupportedEntry) > 0 of - true -> io:format(standard_error, - "~nUnable to update config for app ~p from a .conf file." - " The app is already running. Use advanced.config instead.~n", [kernel]); - false -> ok - end; -maybe_print_warning_for_running_app(App, _Config) -> - io:format(standard_error, - "~nUnable to update config for app ~p from a .conf file: " - " The app is already running.~n", - [App]). - -maybe_set_net_ticktime(undefined) -> - ok; -maybe_set_net_ticktime(KernelConfig) -> - case proplists:get_value(net_ticktime, KernelConfig) of - undefined -> - ok; - NetTickTime -> - case net_kernel:set_net_ticktime(NetTickTime, 0) of - unchanged -> - ok; - change_initiated -> - ok; - {ongoing_change_to, NewNetTicktime} -> - io:format(standard_error, - "~nCouldn't set net_ticktime to ~p " - "as net_kernel is busy changing net_ticktime to ~p seconds ~n", - [NetTickTime, NewNetTicktime]) - end - end. - -generate_config_file(ConfFiles, ConfDir, ScriptDir) -> - generate_config_file(ConfFiles, ConfDir, ScriptDir, - schema_dir(), get_advanced_config()). - - -generate_config_file(ConfFiles, ConfDir, ScriptDir, SchemaDir, Advanced) -> - prepare_plugin_schemas(SchemaDir), - Cuttlefish = filename:join([ScriptDir, "cuttlefish"]), - GeneratedDir = filename:join([ConfDir, "generated"]), - - AdvancedConfigArg = case check_advanced_config(Advanced) of - {ok, FileName} -> [" -a ", FileName]; - none -> [] - end, - rabbit_file:recursive_delete([GeneratedDir]), - Command = lists:concat(["escript ", "\"", Cuttlefish, "\"", - " -f rabbitmq -s ", "\"", SchemaDir, "\"", - " -e ", "\"", ConfDir, "\"", - [[" -c \"", ConfFile, "\""] || ConfFile <- ConfFiles], - AdvancedConfigArg]), - rabbit_log:debug("Generating config file using '~s'", [Command]), - Result = rabbit_misc:os_cmd(Command), - case string:str(Result, " -config ") of - 0 -> {error, {generation_error, Result}}; - _ -> - [OutFile] = rabbit_file:wildcard("rabbitmq.*.config", GeneratedDir), - ResultFile = filename:join([GeneratedDir, "rabbitmq.config"]), - rabbit_file:rename(filename:join([GeneratedDir, OutFile]), - ResultFile), - {ok, ResultFile} + case get_prelaunch_config_state() of + #{config_files := Confs} -> Confs; + _ -> [] end. schema_dir() -> - case init:get_argument(conf_schema_dir) of - {ok, SchemaDir} -> SchemaDir; - _ -> - case code:priv_dir(rabbit) of - {error, bad_name} -> filename:join([".", "priv", "schema"]); - PrivDir -> filename:join([PrivDir, "schema"]) - end - end. - -check_advanced_config(none) -> none; -check_advanced_config(ConfigName) -> - case rabbit_file:is_file(ConfigName) of - true -> {ok, ConfigName}; - false -> none - end. + undefined. get_advanced_config() -> - case init:get_argument(conf_advanced) of + case get_prelaunch_config_state() of %% There can be only one advanced.config - {ok, [FileName | _]} -> + #{config_advanced_file := FileName} when FileName =/= undefined -> case rabbit_file:is_file(FileName) of true -> FileName; false -> none @@ -189,138 +32,15 @@ get_advanced_config() -> _ -> none end. - -prepare_plugin_schemas(SchemaDir) -> - case rabbit_file:is_dir(SchemaDir) of - true -> rabbit_plugins:extract_schemas(SchemaDir); - false -> ok - end. - -spec config_files() -> [config_location()]. config_files() -> - case legacy_erlang_term_config_used() of - true -> - case init:get_argument(config) of - {ok, Files} -> [ filename:absname(filename:rootname(File) ++ ".config") - || [File] <- Files]; - error -> case config_setting() of - none -> []; - File -> [filename:absname(filename:rootname(File, ".config") ++ ".config") - ++ - " (not found)"] - end - end; - false -> - ConfFiles = [filename:absname(File) || File <- get_confs(), - filelib:is_regular(File)], - AdvancedFiles = case get_advanced_config() of - none -> []; - FileName -> [filename:absname(FileName)] - end, - AdvancedFiles ++ ConfFiles - - end. - - -%% This is a pain. We want to know where the config file is. But we -%% can't specify it on the command line if it is missing or the VM -%% will fail to start, so we need to find it by some mechanism other -%% than init:get_arguments/0. We can look at the environment variable -%% which is responsible for setting it... but that doesn't work for a -%% Windows service since the variable can change and the service not -%% be reinstalled, so in that case we add a magic application env. -config_setting() -> - case application:get_env(rabbit, windows_service_config) of - {ok, File1} -> File1; - undefined -> case os:getenv("RABBITMQ_CONFIG_FILE") of - false -> none; - File2 -> File2 - end - end. - --spec validate_config_files() -> ok | {error, {Fmt :: string(), Args :: list()}}. -validate_config_files() -> - ConfigFile = os:getenv("RABBITMQ_CONFIG_FILE"), - AdvancedConfigFile = get_advanced_config(), - AssertConfig = case filename:extension(ConfigFile) of - ".config" -> assert_config(ConfigFile, "RABBITMQ_CONFIG_FILE"); - ".conf" -> assert_conf(ConfigFile, "RABBITMQ_CONFIG_FILE"); - _ -> ok - end, - case AssertConfig of - ok -> - assert_config(AdvancedConfigFile, "RABBITMQ_ADVANCED_CONFIG_FILE"); - {error, Err} -> - {error, Err} - end. - -assert_config("", _) -> ok; -assert_config(none, _) -> ok; -assert_config(Filename, Env) -> - assert_config(filename:extension(Filename), Filename, Env). - --define(ERRMSG_INDENT, " "). - -assert_config(".config", Filename, Env) -> - case filelib:is_regular(Filename) of - true -> - case file:consult(Filename) of - {ok, []} -> {error, - {"Config file ~s should not be empty: ~s", - [Env, Filename]}}; - {ok, [_]} -> ok; - {ok, [_|_]} -> {error, - {"Config file ~s must contain ONE list ended by : ~s", - [Env, Filename]}}; - {error, {1, erl_parse, Err}} -> - % Note: the sequence of spaces is to indent from the [error] prefix, like this: - % - % 2018-09-06 07:05:40.225 [error] Unable to parse erlang terms from RABBITMQ_ADVANCED_CONFIG_FILE... - % Reason: ["syntax error before: ",[]] - {error, {"Unable to parse erlang terms from ~s file: ~s~n" - ?ERRMSG_INDENT - "Reason: ~p~n" - ?ERRMSG_INDENT - "Check that the file is in erlang term format. " ++ - case Env of - "RABBITMQ_CONFIG_FILE" -> - "If you are using the new ini-style format, the file extension should be '.conf'~n"; - _ -> "" - end, - [Env, Filename, Err]}}; - {error, Err} -> - {error, {"Unable to parse erlang terms from ~s file: ~s~n" - ?ERRMSG_INDENT - "Error: ~p~n", - [Env, Filename, Err]}} - end; - false -> - ok - end; -assert_config(BadExt, Filename, Env) -> - {error, {"'~s': Expected extension '.config', got extension '~s' for file '~s'~n", [Env, BadExt, Filename]}}. - -assert_conf("", _) -> ok; -assert_conf(Filename, Env) -> - assert_conf(filename:extension(Filename), Filename, Env). - -assert_conf(".conf", Filename, Env) -> - case filelib:is_regular(Filename) of - true -> - case file:consult(Filename) of - {ok, []} -> ok; - {ok, _} -> - {error, {"Wrong format of the config file ~s: ~s~n" - ?ERRMSG_INDENT - "Check that the file is in the new ini-style config format. " - "If you are using the old format the file extension should " - "be .config~n", - [Env, Filename]}}; - _ -> - ok - end; - false -> - ok - end; -assert_conf(BadExt, Filename, Env) -> - {error, {"'~s': Expected extension '.config', got extension '~s' for file '~s'~n", [Env, BadExt, Filename]}}. + ConfFiles = [filename:absname(File) || File <- get_confs(), + filelib:is_regular(File)], + AdvancedFiles = case get_advanced_config() of + none -> []; + FileName -> [filename:absname(FileName)] + end, + AdvancedFiles ++ ConfFiles. + +get_prelaunch_config_state() -> + rabbit_prelaunch_conf:get_config_state(). diff --git a/deps/rabbit/src/rabbit_connection_tracking.erl b/deps/rabbit/src/rabbit_connection_tracking.erl index 403fbf419197f78ee72dea793fdfa9acc49ec18a..e58723c53d1d3df0f66173e75f2ac03ef6566a0c 100644 --- a/deps/rabbit/src/rabbit_connection_tracking.erl +++ b/deps/rabbit/src/rabbit_connection_tracking.erl @@ -261,6 +261,7 @@ tracked_connection_per_vhost_table_name_for(Node) -> -spec register_connection(rabbit_types:tracked_connection()) -> ok. +-dialyzer([{nowarn_function, [register_connection/1]}, race_conditions]). register_connection(#tracked_connection{vhost = VHost, id = ConnId, node = Node} = Conn) when Node =:= node() -> TableName = tracked_connection_table_name_for(Node), diff --git a/deps/rabbit/src/rabbit_control_pbe.erl b/deps/rabbit/src/rabbit_control_pbe.erl index 674d38b0d9f81a78e58151ba139b6481cc617624..525b36125ff71442343d83d11e4c68a3b3e6802d 100644 --- a/deps/rabbit/src/rabbit_control_pbe.erl +++ b/deps/rabbit/src/rabbit_control_pbe.erl @@ -52,10 +52,9 @@ encode(Cipher, Hash, Iterations, Args) -> [Value, PassPhrase] = Args, try begin TermValue = evaluate_input_as_term(Value), - Result = rabbit_pbe:encrypt_term(Cipher, Hash, Iterations, - list_to_binary(PassPhrase), - TermValue), - {ok, io_lib:format("~p", [{encrypted, Result}])} + Result = {encrypted, _} = rabbit_pbe:encrypt_term(Cipher, Hash, Iterations, + list_to_binary(PassPhrase), TermValue), + {ok, io_lib:format("~p", [Result])} end catch _:Msg -> {error, io_lib:format("Error during cipher operation: ~p", [Msg])} @@ -70,10 +69,10 @@ decode(Cipher, Hash, Iterations, Args) -> try begin TermValue = evaluate_input_as_term(Value), TermToDecrypt = case TermValue of - {encrypted, EncryptedTerm} -> + {encrypted, _}=EncryptedTerm -> EncryptedTerm; _ -> - TermValue + {encrypted, TermValue} end, Result = rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, list_to_binary(PassPhrase), diff --git a/deps/rabbit/src/rabbit_core_ff.erl b/deps/rabbit/src/rabbit_core_ff.erl index 03f686fb335a3ea446fcb71b22c849a32441f800..c26221fbacc7259dd458c0c9828a868eec5702a5 100644 --- a/deps/rabbit/src/rabbit_core_ff.erl +++ b/deps/rabbit/src/rabbit_core_ff.erl @@ -63,8 +63,9 @@ quorum_queue_migration(_FeatureName, _FeatureProps, is_enabled) -> mnesia:table_info(rabbit_durable_queue, attributes) =:= Fields. migrate_to_amqqueue_with_type(FeatureName, [Table | Rest], Fields) -> - rabbit_log:info("Feature flag `~s`: migrating Mnesia table ~s...", - [FeatureName, Table]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: migrating Mnesia table ~s...", + [FeatureName, Table]), Fun = fun(Queue) -> amqqueue:upgrade_to(amqqueue_v2, Queue) end, case mnesia:transform_table(Table, Fun, Fields) of {atomic, ok} -> migrate_to_amqqueue_with_type(FeatureName, @@ -73,8 +74,9 @@ migrate_to_amqqueue_with_type(FeatureName, [Table | Rest], Fields) -> {aborted, Reason} -> {error, Reason} end; migrate_to_amqqueue_with_type(FeatureName, [], _) -> - rabbit_log:info("Feature flag `~s`: Mnesia tables migration done", - [FeatureName]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: Mnesia tables migration done", + [FeatureName]), ok. %% ------------------------------------------------------------------- @@ -96,10 +98,10 @@ implicit_default_bindings_migration(_Feature_Name, _FeatureProps, remove_explicit_default_bindings(_FeatureName, []) -> ok; remove_explicit_default_bindings(FeatureName, Queues) -> - rabbit_log:info("Feature flag `~s`: deleting explicit " - "default bindings for ~b queues " - "(it may take some time)...", - [FeatureName, length(Queues)]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: deleting explicit default bindings " + "for ~b queues (it may take some time)...", + [FeatureName, length(Queues)]), [rabbit_binding:remove_default_exchange_binding_rows_of(Q) || Q <- Queues], ok. diff --git a/deps/rabbit/src/rabbit_definitions.erl b/deps/rabbit/src/rabbit_definitions.erl index 4d666b88fc50fe4673f9c3b4dc77a757c45f3c54..a9e71e32f00d63da90e9b57c86be3dcdc01a5459 100644 --- a/deps/rabbit/src/rabbit_definitions.erl +++ b/deps/rabbit/src/rabbit_definitions.erl @@ -17,6 +17,7 @@ -module(rabbit_definitions). -include_lib("rabbit_common/include/rabbit.hrl"). +-export([boot/0]). %% automatic import on boot -export([maybe_load_definitions/0, maybe_load_definitions_from/2]). %% import @@ -58,6 +59,12 @@ -export_type([definition_object/0, definition_list/0, definition_category/0, definitions/0]). +-define(IMPORT_WORK_POOL, definition_import_pool). + +boot() -> + PoolSize = application:get_env(rabbit, definition_import_work_pool_size, rabbit_runtime:guess_number_of_cpu_cores()), + rabbit_sup:start_supervisor_child(definition_import_pool_sup, worker_pool_sup, [PoolSize, ?IMPORT_WORK_POOL]). + maybe_load_definitions() -> %% this feature was a part of rabbitmq-management for a long time, %% so we check rabbit_management.load_definitions for backward compatibility. @@ -224,20 +231,22 @@ apply_defs(Map, ActingUser, VHost) when is_binary(VHost) -> apply_defs(Map, ActingUser, SuccessFun) when is_function(SuccessFun) -> Version = maps:get(rabbitmq_version, Map, maps:get(rabbit_version, Map, undefined)), try - for_all(users, ActingUser, Map, + concurrent_for_all(users, ActingUser, Map, fun(User, _Username) -> rabbit_auth_backend_internal:put_user(User, Version, ActingUser) end), - for_all(vhosts, ActingUser, Map, fun add_vhost/2), + concurrent_for_all(vhosts, ActingUser, Map, fun add_vhost/2), validate_limits(Map), - for_all(permissions, ActingUser, Map, fun add_permission/2), - for_all(topic_permissions, ActingUser, Map, fun add_topic_permission/2), - for_all(parameters, ActingUser, Map, fun add_parameter/2), - for_all(global_parameters, ActingUser, Map, fun add_global_parameter/2), - for_all(policies, ActingUser, Map, fun add_policy/2), - for_all(queues, ActingUser, Map, fun add_queue/2), - for_all(exchanges, ActingUser, Map, fun add_exchange/2), - for_all(bindings, ActingUser, Map, fun add_binding/2), + concurrent_for_all(permissions, ActingUser, Map, fun add_permission/2), + concurrent_for_all(topic_permissions, ActingUser, Map, fun add_topic_permission/2), + sequential_for_all(parameters, ActingUser, Map, fun add_parameter/2), + sequential_for_all(global_parameters, ActingUser, Map, fun add_global_parameter/2), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, fun add_policy/2), + concurrent_for_all(queues, ActingUser, Map, fun add_queue/2), + concurrent_for_all(exchanges, ActingUser, Map, fun add_exchange/2), + concurrent_for_all(bindings, ActingUser, Map, fun add_binding/2), SuccessFun(), ok catch {error, E} -> {error, E}; @@ -254,11 +263,13 @@ apply_defs(Map, ActingUser, SuccessFun, VHost) when is_binary(VHost) -> [VHost, ActingUser]), try validate_limits(Map, VHost), - for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), - for_all(policies, ActingUser, Map, VHost, fun add_policy/3), - for_all(queues, ActingUser, Map, VHost, fun add_queue/3), - for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), - for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), + sequential_for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, VHost, fun add_policy/3), + concurrent_for_all(queues, ActingUser, Map, VHost, fun add_queue/3), + concurrent_for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), + concurrent_for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), SuccessFun() catch {error, E} -> {error, format(E)}; exit:E -> {error, format(E)} @@ -275,42 +286,93 @@ apply_defs(Map, ActingUser, SuccessFun, ErrorFun, VHost) -> [VHost, ActingUser]), try validate_limits(Map, VHost), - for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), - for_all(policies, ActingUser, Map, VHost, fun add_policy/3), - for_all(queues, ActingUser, Map, VHost, fun add_queue/3), - for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), - for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), + sequential_for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, VHost, fun add_policy/3), + concurrent_for_all(queues, ActingUser, Map, VHost, fun add_queue/3), + concurrent_for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), + concurrent_for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), SuccessFun() catch {error, E} -> ErrorFun(format(E)); exit:E -> ErrorFun(format(E)) end. -for_all(Category, ActingUser, Definitions, Fun) -> +sequential_for_all(Category, ActingUser, Definitions, Fun) -> case maps:get(rabbit_data_coercion:to_atom(Category), Definitions, undefined) of undefined -> ok; List -> case length(List) of 0 -> ok; - N -> rabbit_log:info("Importing ~p ~s...", [N, human_readable_category_name(Category)]) + N -> rabbit_log:info("Importing sequentially ~p ~s...", [N, human_readable_category_name(Category)]) end, [begin %% keys are expected to be atoms - Atomized = maps:fold(fun (K, V, Acc) -> - maps:put(rabbit_data_coercion:to_atom(K), V, Acc) - end, #{}, M), - Fun(Atomized, ActingUser) + Fun(atomize_keys(M), ActingUser) end || M <- List, is_map(M)] end. -for_all(Name, ActingUser, Definitions, VHost, Fun) -> +sequential_for_all(Name, ActingUser, Definitions, VHost, Fun) -> + case maps:get(rabbit_data_coercion:to_atom(Name), Definitions, undefined) of + undefined -> ok; + List -> [Fun(VHost, atomize_keys(M), ActingUser) || M <- List, is_map(M)] + end. + +concurrent_for_all(Category, ActingUser, Definitions, Fun) -> + case maps:get(rabbit_data_coercion:to_atom(Category), Definitions, undefined) of + undefined -> ok; + List -> + case length(List) of + 0 -> ok; + N -> rabbit_log:info("Importing concurrently ~p ~s...", [N, human_readable_category_name(Category)]) + end, + WorkPoolFun = fun(M) -> + Fun(atomize_keys(M), ActingUser) + end, + do_concurrent_for_all(List, WorkPoolFun) + end. +concurrent_for_all(Name, ActingUser, Definitions, VHost, Fun) -> case maps:get(rabbit_data_coercion:to_atom(Name), Definitions, undefined) of undefined -> ok; - List -> [Fun(VHost, maps:from_list([{atomise_name(K), V} || {K, V} <- maps:to_list(M)]), - ActingUser) || - M <- List, is_map(M)] + List -> + WorkPoolFun = fun(M) -> + Fun(VHost, atomize_keys(M), ActingUser) + end, + do_concurrent_for_all(List, WorkPoolFun) + end. + +do_concurrent_for_all(List, WorkPoolFun) -> + {ok, Gatherer} = gatherer:start_link(), + [begin + %% keys are expected to be atoms + ok = gatherer:fork(Gatherer), + worker_pool:submit_async( + ?IMPORT_WORK_POOL, + fun() -> + try + WorkPoolFun(M) + catch {error, E} -> gatherer:in(Gatherer, {error, E}); + _:E -> gatherer:in(Gatherer, {error, E}) + end, + gatherer:finish(Gatherer) + end) + end || M <- List, is_map(M)], + case gatherer:out(Gatherer) of + empty -> + ok = gatherer:stop(Gatherer); + {value, {error, E}} -> + ok = gatherer:stop(Gatherer), + throw({error, E}) end. +-spec atomize_keys(#{any() => any()}) -> #{atom() => any()}. + +atomize_keys(M) -> + maps:fold(fun(K, V, Acc) -> + maps:put(rabbit_data_coercion:to_atom(K), V, Acc) + end, #{}, M). + -spec human_readable_category_name(definition_category()) -> string(). human_readable_category_name(topic_permissions) -> "topic permissions"; @@ -390,6 +452,8 @@ add_policy(VHost, Param, Username) -> exit(rabbit_data_coercion:to_binary(rabbit_misc:escape_html_tags(E ++ S))) end. +-spec add_vhost(map(), rabbit_types:username()) -> ok. + add_vhost(VHost, ActingUser) -> VHostName = maps:get(name, VHost, undefined), VHostTrace = maps:get(tracing, VHost, undefined), @@ -533,25 +597,12 @@ build_filtered_map([Queue|Rest], AccMap0) -> {Rec, VHost} = build_queue_data(Queue), case rabbit_amqqueue:lookup(Rec) of {error, not_found} -> - AccMap1 = maps_update_with(VHost, fun(V) -> V + 1 end, 1, AccMap0), + AccMap1 = maps:update_with(VHost, fun(V) -> V + 1 end, 1, AccMap0), build_filtered_map(Rest, AccMap1); {ok, _} -> build_filtered_map(Rest, AccMap0) end. -%% Copy of maps:with_util/3 from Erlang 20.0.1. -maps_update_with(Key,Fun,Init,Map) when is_function(Fun,1), is_map(Map) -> - case maps:find(Key,Map) of - {ok,Val} -> maps:update(Key,Fun(Val),Map); - error -> maps:put(Key,Init,Map) - end; -maps_update_with(Key,Fun,Init,Map) -> - erlang:error(maps_error_type(Map),[Key,Fun,Init,Map]). - -%% Copy of maps:error_type/1 from Erlang 20.0.1. -maps_error_type(M) when is_map(M) -> badarg; -maps_error_type(V) -> {badmap, V}. - validate_vhost_limit(VHost, AddCount, ok) -> WouldExceed = rabbit_vhost_limit:would_exceed_queue_limit(AddCount, VHost), validate_vhost_queue_limit(VHost, AddCount, WouldExceed). @@ -569,8 +620,6 @@ validate_vhost_queue_limit(VHost, AddCount, {true, Limit, QueueCount}) -> ErrMsg = rabbit_misc:format(ErrFmt, ErrInfo), exit({vhost_limit_exceeded, ErrMsg}). -atomise_name(N) -> rabbit_data_coercion:to_atom(N). - get_or_missing(K, L) -> case maps:get(K, L, undefined) of undefined -> {key_missing, K}; @@ -588,7 +637,8 @@ list_exchanges() -> %% exclude internal exchanges, they are not meant to be declared or used by %% applications [exchange_definition(X) || X <- lists:filter(fun(#exchange{internal = true}) -> false; - (#exchange{}) -> true + (#exchange{name = #resource{name = <<>>}}) -> false; + (X) -> not rabbit_exchange:is_amq_prefixed(X) end, rabbit_exchange:list())]. @@ -664,14 +714,14 @@ list_users() -> end || U <- rabbit_auth_backend_internal:list_users()]. list_runtime_parameters() -> - [runtime_parameter_definition(P) || P <- rabbit_runtime_parameters:list()]. + [runtime_parameter_definition(P) || P <- rabbit_runtime_parameters:list(), is_list(P)]. runtime_parameter_definition(Param) -> #{ <<"vhost">> => pget(vhost, Param), <<"component">> => pget(component, Param), <<"name">> => pget(name, Param), - <<"value">> => maps:from_list(pget(value, Param)) + <<"value">> => pget(value, Param) }. list_global_runtime_parameters() -> diff --git a/deps/rabbit/src/rabbit_epmd_monitor.erl b/deps/rabbit/src/rabbit_epmd_monitor.erl index 19e8220215b41f77f59db042fc03335ff6356071..f034b4986bba1090163e668b3366575744558e40 100644 --- a/deps/rabbit/src/rabbit_epmd_monitor.erl +++ b/deps/rabbit/src/rabbit_epmd_monitor.erl @@ -52,28 +52,8 @@ start_link() -> init([]) -> {Me, Host} = rabbit_nodes:parts(node()), Mod = net_kernel:epmd_module(), - init_handle_port_please(Mod:port_please(Me, Host), Mod, Me, Host). - -init_handle_port_please(noport, Mod, Me, Host) -> - State = #state{mod = Mod, - me = Me, - host = Host, - port = undefined}, - rabbit_log:info("epmd does not know us, re-registering as ~s~n", [Me]), - {ok, ensure_timer(State)}; -init_handle_port_please({port, Port, _Version}, Mod, Me, Host) -> - rabbit_log:info("epmd monitor knows us, inter-node communication (distribution) port: ~p", [Port]), - State = #state{mod = Mod, - me = Me, - host = Host, - port = Port}, - {ok, ensure_timer(State)}; -init_handle_port_please({error, Error}, Mod, Me, Host) -> - rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), - State = #state{mod = Mod, - me = Me, - host = Host, - port = undefined}, + {ok, Port} = handle_port_please(init, Mod:port_please(Me, Host), Me, undefined), + State = #state{mod = Mod, me = Me, host = Host, port = Port}, {ok, ensure_timer(State)}. handle_call(_Request, _From, State) -> @@ -106,20 +86,28 @@ ensure_timer(State) -> check_epmd(State = #state{mod = Mod, me = Me, host = Host, - port = Port}) -> + port = Port0}) -> rabbit_log:debug("Asked to [re-]register this node (~s@~s) with epmd...", [Me, Host]), - Port1 = case Mod:port_please(Me, Host) of - noport -> - rabbit_log:warning("epmd does not know us, re-registering ~s at port ~b~n", - [Me, Port]), - Port; - {port, NewPort, _Version} -> - NewPort; - {error, Error} -> - rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), - Port - end, + {ok, Port1} = handle_port_please(check, Mod:port_please(Me, Host), Me, Port0), rabbit_nodes:ensure_epmd(), Mod:register_node(Me, Port1), rabbit_log:debug("[Re-]registered this node (~s@~s) with epmd at port ~p", [Me, Host, Port1]), {ok, State#state{port = Port1}}. + +handle_port_please(init, noport, Me, Port) -> + rabbit_log:info("epmd does not know us, re-registering as ~s~n", [Me]), + {ok, Port}; +handle_port_please(check, noport, Me, Port) -> + rabbit_log:warning("epmd does not know us, re-registering ~s at port ~b~n", [Me, Port]), + {ok, Port}; +handle_port_please(_, closed, _Me, Port) -> + rabbit_log:error("epmd monitor failed to retrieve our port from epmd: closed"), + {ok, Port}; +handle_port_please(init, {port, NewPort, _Version}, _Me, _Port) -> + rabbit_log:info("epmd monitor knows us, inter-node communication (distribution) port: ~p", [NewPort]), + {ok, NewPort}; +handle_port_please(check, {port, NewPort, _Version}, _Me, _Port) -> + {ok, NewPort}; +handle_port_please(_, {error, Error}, _Me, Port) -> + rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), + {ok, Port}. diff --git a/deps/rabbit/src/rabbit_exchange.erl b/deps/rabbit/src/rabbit_exchange.erl index df0138d165c633d0584823d15ef148bb62a259f3..fd9ff0c05bed721ce64710ffbaa49c5110e135c8 100644 --- a/deps/rabbit/src/rabbit_exchange.erl +++ b/deps/rabbit/src/rabbit_exchange.erl @@ -24,7 +24,7 @@ update_scratch/3, update_decorators/1, immutable/1, info_keys/0, info/1, info/2, info_all/1, info_all/2, info_all/4, route/2, delete/3, validate_binding/2, count/0]). --export([list_names/0]). +-export([list_names/0, is_amq_prefixed/1]). %% these must be run inside a mnesia tx -export([maybe_auto_delete/2, serial/1, peek_serial/1, update/2]). @@ -102,6 +102,18 @@ serial(#exchange{name = XName} = X) -> (false) -> none end. +-spec is_amq_prefixed(rabbit_types:exchange() | binary()) -> boolean(). + +is_amq_prefixed(Name) when is_binary(Name) -> + case re:run(Name, <<"^amq\.">>) of + nomatch -> false; + {match, _} -> true + end; +is_amq_prefixed(#exchange{name = #resource{name = <<>>}}) -> + false; +is_amq_prefixed(#exchange{name = #resource{name = Name}}) -> + is_amq_prefixed(Name). + -spec declare (name(), type(), boolean(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:username()) diff --git a/deps/rabbit/src/rabbit_feature_flags.erl b/deps/rabbit/src/rabbit_feature_flags.erl index 941d1617e761735074ff5c8bad23f1d326132a29..7f2d3d6c991bd724f7581eeead739bead386e9af 100644 --- a/deps/rabbit/src/rabbit_feature_flags.erl +++ b/deps/rabbit/src/rabbit_feature_flags.erl @@ -129,10 +129,12 @@ do_sync_feature_flags_with_node/1]). -ifdef(TEST). --export([initialize_registry/3, +-export([inject_test_feature_flags/1, + initialize_registry/3, query_supported_feature_flags/0, mark_as_enabled_remotely/2, - mark_as_enabled_remotely/4]). + mark_as_enabled_remotely/4, + registry_loading_lock/0]). -endif. %% Default timeout for operations on remote nodes. @@ -234,6 +236,8 @@ -type migration_fun_context() :: enable | is_enabled. +-type registry_vsn() :: term(). + -export_type([feature_flag_modattr/0, feature_props/0, feature_name/0, @@ -300,28 +304,31 @@ list(Which, Stability) %% dependency tree are left unchanged). enable(FeatureName) when is_atom(FeatureName) -> - rabbit_log:debug("Feature flag `~s`: REQUEST TO ENABLE", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: REQUEST TO ENABLE", + [FeatureName]), case is_enabled(FeatureName) of true -> - rabbit_log:debug("Feature flag `~s`: already enabled", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: already enabled", + [FeatureName]), ok; false -> - rabbit_log:debug("Feature flag `~s`: not enabled, " - "check if supported by cluster", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: not enabled, check if supported by cluster", + [FeatureName]), %% The feature flag must be supported locally and remotely %% (i.e. by all members of the cluster). case is_supported(FeatureName) of true -> - rabbit_log:info("Feature flag `~s`: supported, " - "attempt to enable...", - [FeatureName]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: supported, attempt to enable...", + [FeatureName]), do_enable(FeatureName); false -> - rabbit_log:error("Feature flag `~s`: not supported", - [FeatureName]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: not supported", + [FeatureName]), {error, unsupported} end end; @@ -459,22 +466,23 @@ is_supported_remotely(FeatureNames) -> is_supported_remotely(FeatureName, Timeout) when is_atom(FeatureName) -> is_supported_remotely([FeatureName], Timeout); is_supported_remotely([], _) -> - rabbit_log:debug("Feature flags: skipping query for feature flags " - "support as the given list is empty", - []), + rabbit_log_feature_flags:debug( + "Feature flags: skipping query for feature flags support as the " + "given list is empty"), true; is_supported_remotely(FeatureNames, Timeout) when is_list(FeatureNames) -> case running_remote_nodes() of [] -> - rabbit_log:debug("Feature flags: isolated node; " - "skipping remote node query " - "=> consider `~p` supported", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: isolated node; skipping remote node query " + "=> consider `~p` supported", + [FeatureNames]), true; RemoteNodes -> - rabbit_log:debug("Feature flags: about to query these remote nodes " - "about support for `~p`: ~p", - [FeatureNames, RemoteNodes]), + rabbit_log_feature_flags:debug( + "Feature flags: about to query these remote nodes about " + "support for `~p`: ~p", + [FeatureNames, RemoteNodes]), is_supported_remotely(RemoteNodes, FeatureNames, Timeout) end. @@ -493,23 +501,24 @@ is_supported_remotely(FeatureNames, Timeout) when is_list(FeatureNames) -> %% all nodes, or `false' if one of them is not or the RPC timed out. is_supported_remotely(_, [], _) -> - rabbit_log:debug("Feature flags: skipping query for feature flags " - "support as the given list is empty", - []), + rabbit_log_feature_flags:debug( + "Feature flags: skipping query for feature flags support as the " + "given list is empty"), true; is_supported_remotely([Node | Rest], FeatureNames, Timeout) -> case does_node_support(Node, FeatureNames, Timeout) of true -> is_supported_remotely(Rest, FeatureNames, Timeout); false -> - rabbit_log:debug("Feature flags: stopping query " - "for support for `~p` here", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: stopping query for support for `~p` here", + [FeatureNames]), false end; is_supported_remotely([], FeatureNames, _) -> - rabbit_log:debug("Feature flags: all running remote nodes support `~p`", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: all running remote nodes support `~p`", + [FeatureNames]), true. -spec is_enabled(feature_name() | [feature_name()]) -> boolean(). @@ -825,6 +834,31 @@ list_of_enabled_feature_flags_to_feature_states(FeatureNames) -> initialize_registry(NewSupportedFeatureFlags, NewFeatureStates, WrittenToDisk) -> + Ret = maybe_initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk), + case Ret of + ok -> ok; + restart -> initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk); + Error -> Error + end. + +-spec maybe_initialize_registry(feature_flags(), + feature_states(), + boolean()) -> + ok | restart | {error, any()} | no_return(). + +maybe_initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk) -> + %% We save the version of the current registry before computing + %% the new one. This is used when we do the actual reload: if the + %% current registry was reloaded in the meantime, we need to restart + %% the computation to make sure we don't loose data. + RegistryVsn = registry_vsn(), + %% We take the feature flags already registered. RegistryInitialized = rabbit_ff_registry:is_registry_initialized(), KnownFeatureFlags1 = case RegistryInitialized of @@ -877,13 +911,22 @@ initialize_registry(NewSupportedFeatureFlags, case Proceed of true -> - rabbit_log:debug("Feature flags: (re)initialize registry", []), - do_initialize_registry(AllFeatureFlags, - FeatureStates, - WrittenToDisk); + rabbit_log_feature_flags:debug( + "Feature flags: (re)initialize registry (~p)", + [self()]), + T0 = erlang:timestamp(), + Ret = do_initialize_registry(RegistryVsn, + AllFeatureFlags, + FeatureStates, + WrittenToDisk), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to regen registry: ~p µs", + [timer:now_diff(T1, T0)]), + Ret; false -> - rabbit_log:debug("Feature flags: registry already up-to-date, " - "skipping init", []), + rabbit_log_feature_flags:debug( + "Feature flags: registry already up-to-date, skipping init"), ok end. @@ -902,29 +945,54 @@ does_registry_need_refresh(AllFeatureFlags, %% changes. CurrentAllFeatureFlags = rabbit_ff_registry:list(all), CurrentFeatureStates = rabbit_ff_registry:states(), - CurrentWrittenToDisk = rabbit_ff_registry:is_registry_written_to_disk(), + CurrentWrittenToDisk = + rabbit_ff_registry:is_registry_written_to_disk(), - AllFeatureFlags =/= CurrentAllFeatureFlags orelse - FeatureStates =/= CurrentFeatureStates orelse - WrittenToDisk =/= CurrentWrittenToDisk; + if + AllFeatureFlags =/= CurrentAllFeatureFlags -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, list of feature flags differs"), + true; + FeatureStates =/= CurrentFeatureStates -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, feature flag states differ"), + true; + WrittenToDisk =/= CurrentWrittenToDisk -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, \"written to disk\" state changed"), + true; + true -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: no"), + false + end; false -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, first-time initialization"), true end. --spec do_initialize_registry(feature_flags(), +-spec do_initialize_registry(registry_vsn(), + feature_flags(), feature_states(), boolean()) -> - ok | {error, any()} | no_return(). + ok | restart | {error, any()} | no_return(). %% @private -do_initialize_registry(AllFeatureFlags, +do_initialize_registry(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk) -> %% We log the state of those feature flags. - rabbit_log:info("Feature flags: list of feature flags found:", []), + rabbit_log_feature_flags:info( + "Feature flags: list of feature flags found:"), lists:foreach( fun(FeatureName) -> - rabbit_log:info( + rabbit_log_feature_flags:info( "Feature flags: [~s] ~s", [case maps:is_key(FeatureName, FeatureStates) of true -> @@ -937,15 +1005,17 @@ do_initialize_registry(AllFeatureFlags, end, FeatureName]) end, lists:sort(maps:keys(AllFeatureFlags))), - rabbit_log:info("Feature flags: feature flag states written to disk: ~s", - [case WrittenToDisk of - true -> "yes"; - false -> "no" - end]), + rabbit_log_feature_flags:info( + "Feature flags: feature flag states written to disk: ~s", + [case WrittenToDisk of + true -> "yes"; + false -> "no" + end]), %% We request the registry to be regenerated and reloaded with the %% new state. - regen_registry_mod(AllFeatureFlags, + regen_registry_mod(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk). @@ -953,54 +1023,51 @@ do_initialize_registry(AllFeatureFlags, %% @private -ifdef(TEST). +-define(PT_TESTSUITE_ATTRS, {?MODULE, testsuite_feature_flags_attrs}). + +inject_test_feature_flags(AttributesFromTestsuite) -> + rabbit_log_feature_flags:debug( + "Feature flags: injecting feature flags from testsuite: ~p", + [AttributesFromTestsuite]), + ok = persistent_term:put(?PT_TESTSUITE_ATTRS, AttributesFromTestsuite), + initialize_registry(). + module_attributes_from_testsuite() -> - try - throw(force_exception) - catch - throw:force_exception:Stacktrace -> - Modules = lists:filter( - fun({Mod, _, _, _}) -> - ModS = atom_to_list(Mod), - re:run(ModS, "_SUITE$", [{capture, none}]) - =:= - match - end, Stacktrace), - case Modules of - [{Module, _, _, _} | _] -> - ModInfo = Module:module_info(attributes), - Attrs = lists:append( - [Attr || {Name, Attr} <- ModInfo, - Name =:= rabbit_feature_flag]), - case Attrs of - [] -> []; - _ -> [{Module, Module, Attrs}] - end; - _ -> - [] - end - end. + persistent_term:get(?PT_TESTSUITE_ATTRS, []). query_supported_feature_flags() -> - rabbit_log:debug( - "Feature flags: query feature flags in loaded applications + test " - "module"), - AttributesPerApp = rabbit_misc:all_module_attributes(rabbit_feature_flag), + rabbit_log_feature_flags:debug( + "Feature flags: query feature flags in loaded applications " + "+ testsuite"), + T0 = erlang:timestamp(), + AttributesPerApp = rabbit_misc:rabbitmq_related_module_attributes( + rabbit_feature_flag), AttributesFromTestsuite = module_attributes_from_testsuite(), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to find supported feature flags: ~p µs", + [timer:now_diff(T1, T0)]), AllAttributes = AttributesPerApp ++ AttributesFromTestsuite, prepare_queried_feature_flags(AllAttributes, #{}). -else. query_supported_feature_flags() -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: query feature flags in loaded applications"), - AttributesPerApp = rabbit_misc:all_module_attributes(rabbit_feature_flag), + T0 = erlang:timestamp(), + AttributesPerApp = rabbit_misc:rabbitmq_related_module_attributes( + rabbit_feature_flag), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to find supported feature flags: ~p µs", + [timer:now_diff(T1, T0)]), prepare_queried_feature_flags(AttributesPerApp, #{}). -endif. prepare_queried_feature_flags([{App, _Module, Attributes} | Rest], AllFeatureFlags) -> - rabbit_log:debug("Feature flags: application `~s` " - "has ~b feature flags", - [App, length(Attributes)]), + rabbit_log_feature_flags:debug( + "Feature flags: application `~s` has ~b feature flags", + [App, length(Attributes)]), AllFeatureFlags1 = lists:foldl( fun({FeatureName, FeatureProps}, AllFF) -> merge_new_feature_flags(AllFF, @@ -1028,12 +1095,15 @@ merge_new_feature_flags(AllFeatureFlags, App, FeatureName, FeatureProps) maps:merge(AllFeatureFlags, #{FeatureName => FeatureProps1}). --spec regen_registry_mod(feature_flags(), +-spec regen_registry_mod(registry_vsn(), + feature_flags(), feature_states(), - boolean()) -> ok | {error, any()} | no_return(). + boolean()) -> + ok | restart | {error, any()} | no_return(). %% @private -regen_registry_mod(AllFeatureFlags, +regen_registry_mod(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk) -> %% Here, we recreate the source code of the `rabbit_ff_registry` @@ -1210,56 +1280,108 @@ regen_registry_mod(AllFeatureFlags, return_warnings], case compile:forms(Forms, CompileOpts) of {ok, Mod, Bin, _} -> - load_registry_mod(Mod, Bin); + load_registry_mod(RegistryVsn, Mod, Bin); {error, Errors, Warnings} -> - rabbit_log:error("Feature flags: registry compilation:~n" - "Errors: ~p~n" - "Warnings: ~p", - [Errors, Warnings]), + rabbit_log_feature_flags:error( + "Feature flags: registry compilation:~n" + "Errors: ~p~n" + "Warnings: ~p", + [Errors, Warnings]), {error, {compilation_failure, Errors, Warnings}} end. --ifdef(TEST). maybe_log_registry_source_code(Forms) -> - case os:getenv("LOG_FF_REGISTRY") of - false -> - ok; - _ -> - rabbit_log:debug( + case rabbit_prelaunch:get_context() of + #{log_feature_flags_registry := true} -> + rabbit_log_feature_flags:debug( "== FEATURE FLAGS REGISTRY ==~n" "~s~n" "== END ==~n", - [erl_prettypr:format(erl_syntax:form_list(Forms))]) + [erl_prettypr:format(erl_syntax:form_list(Forms))]); + _ -> + ok end. --else. -maybe_log_registry_source_code(_) -> - ok. + +-ifdef(TEST). +registry_loading_lock() -> ?FF_REGISTRY_LOADING_LOCK. -endif. --spec load_registry_mod(atom(), binary()) -> - ok | {error, any()} | no_return(). +-spec load_registry_mod(registry_vsn(), atom(), binary()) -> + ok | restart | no_return(). %% @private -load_registry_mod(Mod, Bin) -> - rabbit_log:debug("Feature flags: registry module ready, loading it..."), - FakeFilename = "Compiled and loaded by " ++ ?MODULE_STRING, +load_registry_mod(RegistryVsn, Mod, Bin) -> + rabbit_log_feature_flags:debug( + "Feature flags: registry module ready, loading it (~p)...", + [self()]), + FakeFilename = "Compiled and loaded by " ?MODULE_STRING, %% Time to load the new registry, replacing the old one. We use a %% lock here to synchronize concurrent reloads. global:set_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), - _ = code:soft_purge(Mod), - _ = code:delete(Mod), - Ret = code:load_binary(Mod, FakeFilename, Bin), + rabbit_log_feature_flags:debug( + "Feature flags: acquired lock before reloading registry module (~p)", + [self()]), + %% We want to make sure that the old registry (not the one being + %% currently in use) is purged by the code server. It means no + %% process lingers on that old code. + %% + %% We use code:soft_purge() for that (meaning no process is killed) + %% and we wait in an infinite loop for that to succeed. + ok = purge_old_registry(Mod), + %% Now we can replace the currently loaded registry by the new one. + %% The code server takes care of marking the current registry as old + %% and load the new module in an atomic operation. + %% + %% Therefore there is no chance of a window where there is no + %% registry module available, causing the one on disk to be + %% reloaded. + Ret = case registry_vsn() of + RegistryVsn -> code:load_binary(Mod, FakeFilename, Bin); + OtherVsn -> {error, {restart, RegistryVsn, OtherVsn}} + end, + rabbit_log_feature_flags:debug( + "Feature flags: releasing lock after reloading registry module (~p)", + [self()]), global:del_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), case Ret of {module, _} -> - rabbit_log:debug("Feature flags: registry module loaded"), + rabbit_log_feature_flags:debug( + "Feature flags: registry module loaded (vsn: ~p -> ~p)", + [RegistryVsn, registry_vsn()]), ok; + {error, {restart, Expected, Current}} -> + rabbit_log_feature_flags:error( + "Feature flags: another registry module was loaded in the " + "meantime (expected old vsn: ~p, current vsn: ~p); " + "restarting the regen", + [Expected, Current]), + restart; {error, Reason} -> - rabbit_log:error("Feature flags: failed to load registry " - "module: ~p", [Reason]), + rabbit_log_feature_flags:error( + "Feature flags: failed to load registry module: ~p", + [Reason]), throw({feature_flag_registry_reload_failure, Reason}) end. +-spec registry_vsn() -> registry_vsn(). +%% @private + +registry_vsn() -> + Attrs = rabbit_ff_registry:module_info(attributes), + proplists:get_value(vsn, Attrs, undefined). + +purge_old_registry(Mod) -> + case code:is_loaded(Mod) of + {file, _} -> do_purge_old_registry(Mod); + false -> ok + end. + +do_purge_old_registry(Mod) -> + case code:soft_purge(Mod) of + true -> ok; + false -> do_purge_old_registry(Mod) + end. + %% ------------------------------------------------------------------- %% Feature flags state storage. %% ------------------------------------------------------------------- @@ -1301,7 +1423,7 @@ try_to_read_enabled_feature_flags_list() -> %% feature flags to be empty. []; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to read the `feature_flags` " "file at `~s`: ~s", [File, file:format_error(Reason)]), @@ -1330,6 +1452,8 @@ try_to_write_enabled_feature_flags_list(FeatureNames) -> %% are unknown feature flags in that file, we want to keep their %% state, even though they are unsupported at this time. It could be %% that a plugin was disabled in the meantime. + %% + %% FIXME: Lock this code to fix concurrent read/modify/write. PreviouslyEnabled = case try_to_read_enabled_feature_flags_list() of {error, _} -> []; List -> List @@ -1351,7 +1475,7 @@ try_to_write_enabled_feature_flags_list(FeatureNames) -> ok -> ok; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to write the `feature_flags` " "file at `~s`: ~s", [File, file:format_error(Reason)]), @@ -1415,7 +1539,7 @@ enable_locally(FeatureName) when is_atom(FeatureName) -> true -> ok; false -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flag `~s`: enable locally (as part of feature " "flag states synchronization)", [FeatureName]), @@ -1447,8 +1571,9 @@ do_enable_locally(FeatureName) -> enable_dependencies(FeatureName, Everywhere) -> FeatureProps = rabbit_ff_registry:get(FeatureName), DependsOn = maps:get(depends_on, FeatureProps, []), - rabbit_log:debug("Feature flag `~s`: enable dependencies: ~p", - [FeatureName, DependsOn]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: enable dependencies: ~p", + [FeatureName, DependsOn]), enable_dependencies(FeatureName, DependsOn, Everywhere). -spec enable_dependencies(feature_name(), [feature_name()], boolean()) -> @@ -1479,26 +1604,26 @@ run_migration_fun(FeatureName, FeatureProps, Arg) -> case maps:get(migration_fun, FeatureProps, none) of {MigrationMod, MigrationFun} when is_atom(MigrationMod) andalso is_atom(MigrationFun) -> - rabbit_log:debug("Feature flag `~s`: run migration function ~p " - "with arg: ~p", - [FeatureName, MigrationFun, Arg]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: run migration function ~p with arg: ~p", + [FeatureName, MigrationFun, Arg]), try erlang:apply(MigrationMod, MigrationFun, [FeatureName, FeatureProps, Arg]) catch _:Reason:Stacktrace -> - rabbit_log:error("Feature flag `~s`: migration function " - "crashed: ~p~n~p", - [FeatureName, Reason, Stacktrace]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: migration function crashed: ~p~n~p", + [FeatureName, Reason, Stacktrace]), {error, {migration_fun_crash, Reason, Stacktrace}} end; none -> {error, no_migration_fun}; Invalid -> - rabbit_log:error("Feature flag `~s`: invalid migration " - "function: ~p", - [FeatureName, Invalid]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: invalid migration function: ~p", + [FeatureName, Invalid]), {error, {invalid_migration_fun, Invalid}} end. @@ -1519,8 +1644,9 @@ mark_as_enabled(FeatureName, IsEnabled) -> %% @private mark_as_enabled_locally(FeatureName, IsEnabled) -> - rabbit_log:info("Feature flag `~s`: mark as enabled=~p", - [FeatureName, IsEnabled]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: mark as enabled=~p", + [FeatureName, IsEnabled]), EnabledFeatureNames = maps:keys(list(enabled)), NewEnabledFeatureNames = case IsEnabled of true -> @@ -1569,32 +1695,36 @@ mark_as_enabled_remotely(Nodes, FeatureName, IsEnabled, Timeout) -> FailedNodes = [Node || {Node, Ret} <- Rets, Ret =/= ok], case FailedNodes of [] -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: `~s` successfully marked as enabled=~p on all " "nodes", [FeatureName, IsEnabled]), ok; _ -> - T1 = erlang:timestamp(), - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to mark feature flag `~s` as enabled=~p " "on the following nodes:", [FeatureName, IsEnabled]), - [rabbit_log:error( + [rabbit_log_feature_flags:error( "Feature flags: - ~s: ~p", [Node, Ret]) || {Node, Ret} <- Rets, Ret =/= ok], - NewTimeout = Timeout - (timer:now_diff(T1, T0) div 1000), + Sleep = 1000, + T1 = erlang:timestamp(), + Duration = timer:now_diff(T1, T0), + NewTimeout = (Timeout * 1000 - Duration) div 1000 - Sleep, if NewTimeout > 0 -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: retrying with a timeout of ~b " - "milliseconds", [NewTimeout]), + "ms after sleeping for ~b ms", + [NewTimeout, Sleep]), + timer:sleep(Sleep), mark_as_enabled_remotely(FailedNodes, FeatureName, IsEnabled, NewTimeout); true -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: not retrying; RPC went over the " "~b milliseconds timeout", [Timeout]), %% FIXME: Is crashing the process the best solution here? @@ -1630,8 +1760,9 @@ query_running_remote_nodes(Node, Timeout) -> %% @private does_node_support(Node, FeatureNames, Timeout) -> - rabbit_log:debug("Feature flags: querying `~p` support on node ~s...", - [FeatureNames, Node]), + rabbit_log_feature_flags:debug( + "Feature flags: querying `~p` support on node ~s...", + [FeatureNames, Node]), Ret = case node() of Node -> is_supported_locally(FeatureNames); @@ -1644,24 +1775,27 @@ does_node_support(Node, FeatureNames, Timeout) -> %% See run_feature_flags_mod_on_remote_node/4 for %% an explanation why we consider this node a 3.7.x %% pre-feature-flags node. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: no feature flags support on node `~s`, " "consider the feature flags unsupported: ~p", [Node, FeatureNames]), false; {error, Reason} -> - rabbit_log:error("Feature flags: error while querying `~p` " - "support on node ~s: ~p", - [FeatureNames, Node, Reason]), + rabbit_log_feature_flags:error( + "Feature flags: error while querying `~p` support on " + "node ~s: ~p", + [FeatureNames, Node, Reason]), false; true -> - rabbit_log:debug("Feature flags: node `~s` supports `~p`", - [Node, FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` supports `~p`", + [Node, FeatureNames]), true; false -> - rabbit_log:debug("Feature flags: node `~s` does not support `~p`; " - "stopping query here", - [Node, FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` does not support `~p`; " + "stopping query here", + [Node, FeatureNames]), false end. @@ -1704,37 +1838,41 @@ check_node_compatibility(Node, Timeout) -> %% The goal is that such feature flags are not blocking the %% communication between nodes because the code (which would %% break) is missing on those nodes. Therefore they should not be - %% considered when determinig compatibility. + %% considered when determining compatibility. exchange_feature_flags_from_unknown_apps(Node, Timeout), - %% FIXME FIXME FIXME - %% Quand on tente de mettre deux nœuds en cluster, on a : + %% FIXME: + %% When we try to cluster two nodes, we get: %% Feature flags: starting an unclustered node: all feature flags %% will be enabled by default - %% Ça ne devrait sans doute pas être le cas... + %% It should probably not be the case... %% We can now proceed with the actual compatibility check. - rabbit_log:debug("Feature flags: node `~s` compatibility check, part 1/2", - [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` compatibility check, part 1/2", + [Node]), Part1 = local_enabled_feature_flags_is_supported_remotely(Node, Timeout), - rabbit_log:debug("Feature flags: node `~s` compatibility check, part 2/2", - [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` compatibility check, part 2/2", + [Node]), Part2 = remote_enabled_feature_flags_is_supported_locally(Node, Timeout), case {Part1, Part2} of {true, true} -> - rabbit_log:debug("Feature flags: node `~s` is compatible", [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` is compatible", + [Node]), ok; {false, _} -> - rabbit_log:error("Feature flags: node `~s` is INCOMPATIBLE: " - "feature flags enabled locally are not " - "supported remotely", - [Node]), + rabbit_log_feature_flags:error( + "Feature flags: node `~s` is INCOMPATIBLE: " + "feature flags enabled locally are not supported remotely", + [Node]), {error, incompatible_feature_flags}; {_, false} -> - rabbit_log:error("Feature flags: node `~s` is INCOMPATIBLE: " - "feature flags enabled remotely are not " - "supported locally", - [Node]), + rabbit_log_feature_flags:error( + "Feature flags: node `~s` is INCOMPATIBLE: " + "feature flags enabled remotely are not supported locally", + [Node]), {error, incompatible_feature_flags} end. @@ -1815,13 +1953,13 @@ run_feature_flags_mod_on_remote_node(Node, Function, Args, Timeout) -> %% (rabbit_misc:version_minor_equivalent/2) called from %% rabbit_mnesia:check_rabbit_consistency/2 already blocked %% this situation from happening before we reach this point. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: ~s:~s~p unavailable on node `~s`: " "assuming it is a RabbitMQ 3.7.x pre-feature-flags node", [?MODULE, Function, Args, Node]), {error, pre_feature_flags_rabbitmq}; {badrpc, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: error while running ~s:~s~p " "on node `~s`: ~p", [?MODULE, Function, Args, Node, Reason]), @@ -1837,29 +1975,30 @@ run_feature_flags_mod_on_remote_node(Node, Function, Args, Timeout) -> %% @private query_remote_feature_flags(Node, Which, Timeout) -> - rabbit_log:debug("Feature flags: querying ~s feature flags " - "on node `~s`...", - [Which, Node]), + rabbit_log_feature_flags:debug( + "Feature flags: querying ~s feature flags on node `~s`...", + [Which, Node]), case run_feature_flags_mod_on_remote_node(Node, list, [Which], Timeout) of {error, pre_feature_flags_rabbitmq} -> %% See run_feature_flags_mod_on_remote_node/4 for %% an explanation why we consider this node a 3.7.x %% pre-feature-flags node. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: no feature flags support on node `~s`, " "consider the list of feature flags empty", [Node]), #{}; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: error while querying ~s feature flags " "on node `~s`: ~p", [Which, Node, Reason]), Error; RemoteFeatureFlags when is_map(RemoteFeatureFlags) -> RemoteFeatureNames = maps:keys(RemoteFeatureFlags), - rabbit_log:debug("Feature flags: querying ~s feature flags " - "on node `~s` done; ~s features: ~p", - [Which, Node, Which, RemoteFeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: querying ~s feature flags on node `~s` " + "done; ~s features: ~p", + [Which, Node, Which, RemoteFeatureNames]), RemoteFeatureFlags end. @@ -1887,11 +2026,16 @@ merge_feature_flags_from_unknown_apps(FeatureFlags) end, #{}, FeatureFlags), - rabbit_log:debug( - "Feature flags: register feature flags provided by applications " - "unknown locally: ~p", - [maps:keys(FeatureFlagsFromUnknownApps)]), - initialize_registry(FeatureFlagsFromUnknownApps). + case maps:keys(FeatureFlagsFromUnknownApps) of + [] -> + ok; + _ -> + rabbit_log_feature_flags:debug( + "Feature flags: register feature flags provided by applications " + "unknown locally: ~p", + [maps:keys(FeatureFlagsFromUnknownApps)]), + initialize_registry(FeatureFlagsFromUnknownApps) + end. exchange_feature_flags_from_unknown_apps(Node, Timeout) -> %% The first step is to fetch feature flags from Erlang applications @@ -1950,7 +2094,7 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> FeatureNames = get_forced_feature_flag_names(), case remote_nodes() of [] when FeatureNames =:= undefined -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered node " "for the first time: all feature flags will be " "enabled by default"), @@ -1958,19 +2102,19 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> [] -> case FeatureNames of [] -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered " "node for the first time: all feature " "flags are forcibly left disabled from " - "the RABBITMQ_FEATURE_FLAGS environment " + "the $RABBITMQ_FEATURE_FLAGS environment " "variable"), ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered " "node for the first time: only the " "following feature flags specified in " - "the RABBITMQ_FEATURE_FLAGS environment " + "the $RABBITMQ_FEATURE_FLAGS environment " "variable will be enabled: ~p", [FeatureNames]), enable(FeatureNames) @@ -1979,7 +2123,7 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> ok end; false -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered node which is " "already initialized: all feature flags left in their " "current state"), @@ -1994,14 +2138,15 @@ sync_feature_flags_with_cluster1([], _) -> ok; sync_feature_flags_with_cluster1(RemoteNodes, Timeout) -> RandomRemoteNode = pick_one_node(RemoteNodes), - rabbit_log:debug("Feature flags: SYNCING FEATURE FLAGS with node `~s`...", - [RandomRemoteNode]), + rabbit_log_feature_flags:debug( + "Feature flags: SYNCING FEATURE FLAGS with node `~s`...", + [RandomRemoteNode]), case query_remote_feature_flags(RandomRemoteNode, enabled, Timeout) of {error, _} = Error -> Error; RemoteFeatureFlags -> RemoteFeatureNames = maps:keys(RemoteFeatureFlags), - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: enabling locally feature flags already " "enabled on node `~s`...", [RandomRemoteNode]), @@ -2016,7 +2161,7 @@ sync_feature_flags_with_cluster1(RemoteNodes, Timeout) -> sync_feature_flags_with_cluster2(RandomRemoteNode, Timeout) -> LocalFeatureNames = maps:keys(list(enabled)), - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: enabling on node `~s` feature flags already " "enabled locally...", [RandomRemoteNode]), @@ -2070,12 +2215,13 @@ get_forced_feature_flag_names() -> end, case Ret of undefined -> ok; - [] -> rabbit_log:info("Feature flags: automatic enablement " - "of feature flags disabled (i.e. none " - "will be enabled automatically)", []); - _ -> rabbit_log:info("Feature flags: automatic enablement " - "of feature flags limited to the " - "following list: ~p", [Ret]) + [] -> rabbit_log_feature_flags:info( + "Feature flags: automatic enablement of feature " + "flags disabled (i.e. none will be enabled " + "automatically)"); + _ -> rabbit_log_feature_flags:info( + "Feature flags: automatic enablement of feature " + "flags limited to the following list: ~p", [Ret]) end, Ret. @@ -2083,9 +2229,12 @@ get_forced_feature_flag_names() -> %% @private get_forced_feature_flag_names_from_env() -> - case os:getenv("RABBITMQ_FEATURE_FLAGS") of - false -> undefined; - Value -> [list_to_atom(V) ||V <- string:lexemes(Value, ",")] + case rabbit_prelaunch:get_context() of + #{forced_feature_flags_on_init := ForcedFFs} + when is_list(ForcedFFs) -> + ForcedFFs; + _ -> + undefined end. -spec get_forced_feature_flag_names_from_config() -> [feature_name()] | undefined. @@ -2114,7 +2263,8 @@ get_forced_feature_flag_names_from_config() -> verify_which_feature_flags_are_actually_enabled() -> AllFeatureFlags = list(all), EnabledFeatureNames = read_enabled_feature_flags_list(), - rabbit_log:debug("Feature flags: double-checking feature flag states..."), + rabbit_log_feature_flags:debug( + "Feature flags: double-checking feature flag states..."), %% In case the previous instance of the node failed to write the %% feature flags list file, we want to double-check the list of %% enabled feature flags read from disk. For each feature flag, @@ -2147,7 +2297,7 @@ verify_which_feature_flags_are_actually_enabled() -> WereDisabled = EnabledFeatureNames -- RepairedEnabledFeatureNames, case {WereEnabled, WereDisabled} of {[], []} -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: the previous instance of this node " "must have failed to write the `feature_flags` " "file at `~s`:", @@ -2155,13 +2305,13 @@ verify_which_feature_flags_are_actually_enabled() -> end, case WereEnabled of [] -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: - list of previously enabled " "feature flags now marked as such: ~p", [WereEnabled]) end, case WereDisabled of [] -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: - list of previously disabled " "feature flags now marked as such: ~p", [WereDisabled]) end, @@ -2172,7 +2322,7 @@ verify_which_feature_flags_are_actually_enabled() -> EnabledFeatureNames -> ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: write the repaired list of enabled feature " "flags"), WrittenToDisk = ok =:= try_to_write_enabled_feature_flags_list( @@ -2190,7 +2340,7 @@ verify_which_feature_flags_are_actually_enabled() -> refresh_feature_flags_after_app_load([]) -> ok; refresh_feature_flags_after_app_load(Apps) -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: ~p -> refreshing feature flags", [Apps]), @@ -2211,7 +2361,7 @@ refresh_feature_flags_after_app_load(Apps) -> [] -> ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: feature flags already " "supported: ~p", [lists:sort(AlreadySupportedFeatureNames)]) @@ -2230,7 +2380,7 @@ refresh_feature_flags_after_app_load(Apps) -> [] -> ok; NewSupportedFeatureNames -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: new feature flags (unseen so " "far): ~p ", [lists:sort(NewSupportedFeatureNames)]) diff --git a/deps/rabbit/src/rabbit_ff_registry.erl b/deps/rabbit/src/rabbit_ff_registry.erl index 1f0c9c0cf899350f4b5741f384ee4017183b8d1b..2587f8e37176c95412bb1f089b778e0dfc996b71 100644 --- a/deps/rabbit/src/rabbit_ff_registry.erl +++ b/deps/rabbit/src/rabbit_ff_registry.erl @@ -37,6 +37,10 @@ is_registry_initialized/0, is_registry_written_to_disk/0]). +-ifdef(TEST). +-on_load(on_load/0). +-endif. + -spec get(rabbit_feature_flags:feature_name()) -> rabbit_feature_flags:feature_props() | undefined. %% @doc @@ -183,3 +187,12 @@ always_return_true() -> always_return_false() -> not always_return_true(). + +-ifdef(TEST). +on_load() -> + _ = (catch rabbit_log_feature_flags:debug( + "Feature flags: Loading initial (uninitialized) registry " + "module (~p)", + [self()])), + ok. +-endif. diff --git a/deps/rabbit/src/rabbit_fifo.erl b/deps/rabbit/src/rabbit_fifo.erl index d0b56961ecfa6a354062c023138da41ecffc123d..0c99c305d5a39cb3cade630dd8477081cc6d6ee6 100644 --- a/deps/rabbit/src/rabbit_fifo.erl +++ b/deps/rabbit/src/rabbit_fifo.erl @@ -609,15 +609,28 @@ tick(_Ts, #?MODULE{cfg = #cfg{name = Name, overview(#?MODULE{consumers = Cons, enqueuers = Enqs, release_cursors = Cursors, + enqueue_count = EnqCount, msg_bytes_enqueue = EnqueueBytes, - msg_bytes_checkout = CheckoutBytes} = State) -> + msg_bytes_checkout = CheckoutBytes, + cfg = Cfg} = State) -> + Conf = #{name => Cfg#cfg.name, + resource => Cfg#cfg.resource, + release_cursor_interval => Cfg#cfg.release_cursor_interval, + dead_lettering_enabled => undefined =/= Cfg#cfg.dead_letter_handler, + max_length => Cfg#cfg.max_length, + max_bytes => Cfg#cfg.max_bytes, + consumer_strategy => Cfg#cfg.consumer_strategy, + max_in_memory_length => Cfg#cfg.max_in_memory_length, + max_in_memory_bytes => Cfg#cfg.max_in_memory_bytes}, #{type => ?MODULE, + config => Conf, num_consumers => maps:size(Cons), num_checked_out => num_checked_out(State), num_enqueuers => maps:size(Enqs), num_ready_messages => messages_ready(State), num_messages => messages_total(State), num_release_cursors => lqueue:len(Cursors), + release_crusor_enqueue_counter => EnqCount, enqueue_message_bytes => EnqueueBytes, checkout_message_bytes => CheckoutBytes}. @@ -633,26 +646,51 @@ get_checked_out(Cid, From, To, #?MODULE{consumers = Consumers}) -> [] end. +-record(aux_gc, {last_raft_idx = 0 :: ra:index()}). +-record(aux, {name :: atom(), + utilisation :: term(), + gc = #aux_gc{} :: #aux_gc{}}). + init_aux(Name) when is_atom(Name) -> %% TODO: catch specific exception throw if table already exists ok = ra_machine_ets:create_table(rabbit_fifo_usage, [named_table, set, public, {write_concurrency, true}]), Now = erlang:monotonic_time(micro_seconds), - {Name, {inactive, Now, 1, 1.0}}. + #aux{name = Name, + utilisation = {inactive, Now, 1, 1.0}}. -handle_aux(_, cast, Cmd, {Name, Use0}, Log, _) -> - Use = case Cmd of +handle_aux(_RaState, cast, Cmd, #aux{name = Name, + utilisation = Use0} = State0, + Log, MacState) -> + State = case Cmd of _ when Cmd == active orelse Cmd == inactive -> - update_use(Use0, Cmd); + State0#aux{utilisation = update_use(Use0, Cmd)}; tick -> true = ets:insert(rabbit_fifo_usage, {Name, utilisation(Use0)}), - Use0; + eval_gc(Log, MacState, State0); eval -> - Use0 + State0 end, - {no_reply, {Name, Use}, Log}. + {no_reply, State, Log}. + +eval_gc(Log, #?MODULE{cfg = #cfg{resource = QR}} = MacState, + #aux{gc = #aux_gc{last_raft_idx = LastGcIdx} = Gc} = AuxState) -> + {Idx, _} = ra_log:last_index_term(Log), + {memory, Mem} = erlang:process_info(self(), memory), + case messages_total(MacState) of + 0 when Idx > LastGcIdx andalso + Mem > ?GC_MEM_LIMIT_B -> + garbage_collect(), + {memory, MemAfter} = erlang:process_info(self(), memory), + rabbit_log:debug("~s: full GC sweep complete. " + "Process memory reduced from ~.2fMB to ~.2fMB.", + [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), + AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}}; + _ -> + AuxState + end. %%% Queries @@ -1022,15 +1060,20 @@ maybe_store_dehydrated_state(RaftIdx, %% the incoming enqueue must already have been dropped State0; true -> - State = convert_prefix_msgs(State0), - {Time, Dehydrated} = timer:tc(fun () -> dehydrate_state(State) end), - rabbit_log:info("dehydrating state took ~bms", [Time div 1000]), + Interval = case Base of + 0 -> 0; + _ -> + Total = messages_total(State0), + min(max(Total, Base), + ?RELEASE_CURSOR_EVERY_MAX) + end, + State = convert_prefix_msgs( + State0#?MODULE{cfg = Cfg#cfg{release_cursor_interval = + {Base, Interval}}}), + Dehydrated = dehydrate_state(State), Cursor = {release_cursor, RaftIdx, Dehydrated}, Cursors = lqueue:in(Cursor, Cursors0), - Interval = lqueue:len(Cursors) * Base, - State#?MODULE{release_cursors = Cursors, - cfg = Cfg#cfg{release_cursor_interval = - {Base, Interval}}} + State#?MODULE{release_cursors = Cursors} end; maybe_store_dehydrated_state(RaftIdx, #?MODULE{cfg = @@ -1098,13 +1141,19 @@ return(#{index := IncomingRaftIdx} = Meta, ConsumerId, Returned, return_one(MsgId, MsgNum, Msg, S0, E0, ConsumerId) end, {State0, Effects0}, Returned), - #{ConsumerId := Con0} = Cons0 = State1#?MODULE.consumers, - Con = Con0#consumer{credit = increase_credit(Con0, map_size(Returned))}, - {Cons, SQ, Effects2} = update_or_remove_sub(ConsumerId, Con, Cons0, - SQ0, Effects1), - State2 = State1#?MODULE{consumers = Cons, - service_queue = SQ}, - {State, ok, Effects} = checkout(Meta, State2, Effects2), + {State2, Effects3} = + case State1#?MODULE.consumers of + #{ConsumerId := Con0} = Cons0 -> + Con = Con0#consumer{credit = increase_credit(Con0, + map_size(Returned))}, + {Cons, SQ, Effects2} = update_or_remove_sub(ConsumerId, Con, + Cons0, SQ0, Effects1), + {State1#?MODULE{consumers = Cons, + service_queue = SQ}, Effects2}; + _ -> + {State1, Effects1} + end, + {State, ok, Effects} = checkout(Meta, State2, Effects3), update_smallest_raft_index(IncomingRaftIdx, State, Effects). % used to processes messages that are finished diff --git a/deps/rabbit/src/rabbit_fifo.hrl b/deps/rabbit/src/rabbit_fifo.hrl index b9e967cbb18378ecb70a4f90100edf8cb1d59d9e..ebbaa9e1eb6f9eb211a2ac59a54a6359f675b6d3 100644 --- a/deps/rabbit/src/rabbit_fifo.hrl +++ b/deps/rabbit/src/rabbit_fifo.hrl @@ -68,7 +68,13 @@ % represents a partially applied module call -define(RELEASE_CURSOR_EVERY, 64000). +-define(RELEASE_CURSOR_EVERY_MAX, 3200000). -define(USE_AVG_HALF_LIFE, 10000.0). +%% an average QQ without any message uses about 100KB so setting this limit +%% to ~10 times that should be relatively safe. +-define(GC_MEM_LIMIT_B, 2000000). + +-define(MB, 1048576). -record(consumer, {meta = #{} :: consumer_meta(), diff --git a/deps/rabbit/src/rabbit_fifo_client.erl b/deps/rabbit/src/rabbit_fifo_client.erl index d9807e3543487216c96a377928d7df5d01cf0fa5..2779096dbb9407da5e0158bae67fe880dbe5b921 100644 --- a/deps/rabbit/src/rabbit_fifo_client.erl +++ b/deps/rabbit/src/rabbit_fifo_client.erl @@ -46,7 +46,7 @@ -include_lib("rabbit_common/include/rabbit.hrl"). --define(SOFT_LIMIT, 256). +-define(SOFT_LIMIT, 32). -define(TIMER_TIME, 10000). -type seq() :: non_neg_integer(). @@ -534,8 +534,8 @@ handle_ra_event(From, {applied, Seqs}, _ -> {internal, lists:reverse(Corrs), lists:reverse(Actions), State1} end; -handle_ra_event(Leader, {machine, {delivery, _ConsumerTag, _} = Del}, State0) -> - handle_delivery(Leader, Del, State0); +handle_ra_event(From, {machine, {delivery, _ConsumerTag, _} = Del}, State0) -> + handle_delivery(From, Del, State0); handle_ra_event(Leader, {machine, leader_change}, #state{leader = Leader} = State) -> %% leader already known @@ -546,11 +546,9 @@ handle_ra_event(Leader, {machine, leader_change}, State0) -> State = resend_all_pending(State0#state{leader = Leader}), {internal, [], [], State}; handle_ra_event(_From, {rejected, {not_leader, undefined, _Seq}}, State0) -> - % TODO: how should these be handled? re-sent on timer or try random - {internal, [], [], State0}; + % set timer to try find leder and resend + {internal, [], [], set_timer(State0)}; handle_ra_event(_From, {rejected, {not_leader, Leader, Seq}}, State0) -> - % ?INFO("rabbit_fifo_client: rejected ~b not leader ~w leader: ~w~n", - % [Seq, From, Leader]), State1 = State0#state{leader = Leader}, State = resend(Seq, State1), {internal, [], [], State}; @@ -658,9 +656,11 @@ resend_all_pending(#state{pending = Pend} = State) -> Seqs = lists:sort(maps:keys(Pend)), lists:foldl(fun resend/2, State, Seqs). -handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, +handle_delivery(From, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, #state{consumer_deliveries = CDels0} = State0) -> {LastId, _} = lists:last(IdMsgs), + %% NB: deliveries may not be from the leader so we will not update the + %% tracked leader id here %% TODO: remove potential default allocation case maps:get(Tag, CDels0, #consumer{last_msg_id = -1}) of #consumer{last_msg_id = Prev} = C @@ -677,7 +677,7 @@ handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, %% When the node is disconnected the leader will return all checked %% out messages to the main queue to ensure they don't get stuck in %% case the node never comes back. - Missing = get_missing_deliveries(Leader, Prev+1, FstId-1, Tag), + Missing = get_missing_deliveries(From, Prev+1, FstId-1, Tag), Del = {delivery, Tag, Missing ++ IdMsgs}, {Del, State0#state{consumer_deliveries = update_consumer(Tag, LastId, @@ -689,7 +689,7 @@ handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, [] -> {internal, [], [], State0}; IdMsgs2 -> - handle_delivery(Leader, {delivery, Tag, IdMsgs2}, State0) + handle_delivery(From, {delivery, Tag, IdMsgs2}, State0) end; _ when FstId =:= 0 -> % the very first delivery diff --git a/deps/rabbit/src/rabbit_hipe.erl b/deps/rabbit/src/rabbit_hipe.erl index bb13a3baf46cbbd85404563f29d9cbf6da06fa77..eb167fc8283578448a87ddad8fd9d892371753c7 100644 --- a/deps/rabbit/src/rabbit_hipe.erl +++ b/deps/rabbit/src/rabbit_hipe.erl @@ -1,3 +1,19 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + -module(rabbit_hipe). %% HiPE compilation uses multiple cores anyway, but some bits are @@ -20,17 +36,18 @@ maybe_hipe_compile() -> end. log_hipe_result({ok, disabled}) -> - ok; + rabbit_log_prelaunch:info( + "HiPE disabled: no modules were natively recompiled.~n", []); log_hipe_result({ok, already_compiled}) -> - rabbit_log:info( + rabbit_log_prelaunch:info( "HiPE in use: modules already natively compiled.~n", []); log_hipe_result({ok, Count, Duration}) -> - rabbit_log:info( + rabbit_log_prelaunch:info( "HiPE in use: compiled ~B modules in ~Bs.~n", [Count, Duration]); log_hipe_result(false) -> io:format( "~nNot HiPE compiling: HiPE not found in this Erlang installation.~n"), - rabbit_log:warning( + rabbit_log_prelaunch:warning( "Not HiPE compiling: HiPE not found in this Erlang installation.~n"). hipe_compile() -> diff --git a/deps/rabbit/src/rabbit_lager.erl b/deps/rabbit/src/rabbit_lager.erl index e0318cdd2144b3a7601c2e544d117ebf103997f6..aa226bce56653edaf598dad8fb9462c413738fee 100644 --- a/deps/rabbit/src/rabbit_lager.erl +++ b/deps/rabbit/src/rabbit_lager.erl @@ -243,6 +243,13 @@ configure_lager() -> end; _ -> ok end, + case application:get_env(lager, colored) of + undefined -> + UseColor = rabbit_prelaunch_early_logging:use_colored_logging(), + application:set_env(lager, colored, UseColor); + _ -> + ok + end, %% Set rabbit.log config variable based on environment. prepare_rabbit_log_config(), %% Configure syslog library. @@ -273,7 +280,7 @@ configure_lager() -> LogConfig = application:get_env(rabbit, log, []), LogLevels = application:get_env(rabbit, log_levels, []), Categories = proplists:get_value(categories, LogConfig, []), - CategoriesConfig = case {Categories, LogLevels} of + CategoriesConfig0 = case {Categories, LogLevels} of {[], []} -> []; {[], LogLevels} -> io:format("Using deprecated config parameter 'log_levels'. " @@ -283,13 +290,41 @@ configure_lager() -> LogLevels); {Categories, []} -> Categories; - {Categories, LogLevels} -> + {Categories, _} -> io:format("Using the deprecated config parameter 'rabbit.log_levels' together " "with a new parameter for log categories." " 'rabbit.log_levels' will be ignored. Please remove it from the config. More at " "https://rabbitmq.com/logging.html"), Categories end, + LogLevelsFromContext = case rabbit_prelaunch:get_context() of + #{log_levels := LL} -> LL; + _ -> undefined + end, + Fun = fun + (global, _, CC) -> + CC; + (color, _, CC) -> + CC; + (CategoryS, LogLevel, CC) -> + Category = list_to_atom(CategoryS), + CCEntry = proplists:get_value( + Category, CC, []), + CCEntry1 = lists:ukeymerge( + 1, + [{level, LogLevel}], + lists:ukeysort(1, CCEntry)), + lists:keystore( + Category, 1, CC, {Category, CCEntry1}) + end, + CategoriesConfig = case LogLevelsFromContext of + undefined -> + CategoriesConfig0; + _ -> + maps:fold(Fun, + CategoriesConfig0, + LogLevelsFromContext) + end, SinkConfigs = lists:map( fun({Name, Config}) -> {rabbit_log:make_internal_sink_name(Name), Config} @@ -365,7 +400,10 @@ lager_backend(exchange) -> lager_exchange_backend. %% Syslog backend is using an old API for configuration and %% does not support proplists. generate_handler(syslog_lager_backend=Backend, HandlerConfig) -> - DefaultConfigVal = default_config_value(level), + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, Level = proplists:get_value(level, HandlerConfig, DefaultConfigVal), ok = configure_handler_backend(Backend), [{Backend, @@ -383,19 +421,61 @@ configure_handler_backend(_Backend) -> ok. default_handler_config(lager_console_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}]; + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, console})}]; default_handler_config(lager_exchange_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}]; + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, exchange})}]; default_handler_config(lager_file_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}, + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, file})}, {date, ""}, {size, 0}]. -default_config_value(level) -> info; -default_config_value(formatter_config) -> +default_config_value(level) -> + LogConfig = application:get_env(rabbit, log, []), + FoldFun = fun + ({_, Cfg}, LL) when is_list(Cfg) -> + NewLL = proplists:get_value(level, Cfg, LL), + case LL of + undefined -> + NewLL; + _ -> + MoreVerbose = lager_util:level_to_num(NewLL) > lager_util:level_to_num(LL), + case MoreVerbose of + true -> NewLL; + false -> LL + end + end; + (_, LL) -> + LL + end, + FoundLL = lists:foldl(FoldFun, undefined, LogConfig), + case FoundLL of + undefined -> info; + _ -> FoundLL + end; +default_config_value({formatter_config, console}) -> + EOL = case application:get_env(lager, colored) of + {ok, true} -> "\e[0m\r\n"; + _ -> "\r\n" + end, + [date, " ", time, " ", color, "[", severity, "] ", + {pid, ""}, + " ", message, EOL]; +default_config_value({formatter_config, _}) -> [date, " ", time, " ", color, "[", severity, "] ", {pid, ""}, " ", message, "\n"]. @@ -417,12 +497,14 @@ prepare_rabbit_log_config() -> tty -> set_env_default_log_console(); FileName when is_list(FileName) -> - case os:getenv("RABBITMQ_LOGS_source") of + case rabbit_prelaunch:get_context() of %% The user explicitly sets $RABBITMQ_LOGS; %% we should override a file location even %% if it's set in rabbitmq.config - "environment" -> set_env_default_log_file(FileName, override); - _ -> set_env_default_log_file(FileName, keep) + #{var_origins := #{main_log_file := environment}} -> + set_env_default_log_file(FileName, override); + _ -> + set_env_default_log_file(FileName, keep) end end, @@ -493,24 +575,36 @@ set_env_upgrade_log_file(FileName) -> ok = application:set_env(rabbit, log, NewLogConfig). generate_lager_sinks(SinkNames, SinkConfigs) -> + LogLevels = case rabbit_prelaunch:get_context() of + #{log_levels := LL} -> LL; + _ -> undefined + end, + DefaultLogLevel = case LogLevels of + #{global := LogLevel} -> + LogLevel; + _ -> + default_config_value(level) + end, lists:map(fun(SinkName) -> SinkConfig = proplists:get_value(SinkName, SinkConfigs, []), SinkHandlers = case proplists:get_value(file, SinkConfig, false) of %% If no file defined - forward everything to the default backend false -> - ForwarderLevel = proplists:get_value(level, SinkConfig, inherit), + ForwarderLevel = proplists:get_value(level, + SinkConfig, + DefaultLogLevel), [{lager_forwarder_backend, [lager_util:make_internal_sink_name(lager), ForwarderLevel]}]; %% If a file defined - add a file backend to handlers and remove all default file backends. File -> %% Use `debug` as a default handler to not override a handler level - Level = proplists:get_value(level, SinkConfig, debug), + Level = proplists:get_value(level, SinkConfig, DefaultLogLevel), DefaultGeneratedHandlers = application:get_env(lager, rabbit_handlers, []), SinkFileHandlers = case proplists:get_value(lager_file_backend, DefaultGeneratedHandlers, undefined) of undefined -> %% Create a new file handler. %% `info` is a default level here. - FileLevel = proplists:get_value(level, SinkConfig, default_config_value(level)), + FileLevel = proplists:get_value(level, SinkConfig, DefaultLogLevel), generate_lager_handlers([{file, [{file, File}, {level, FileLevel}]}]); FileHandler -> %% Replace a filename in the handler @@ -596,27 +690,7 @@ maybe_configure_handler_backends([{Backend, _}|Backends]) -> maybe_configure_handler_backends(Backends). list_expected_sinks() -> - case application:get_env(rabbit, lager_extra_sinks) of - {ok, List} -> - List; - undefined -> - CompileOptions = proplists:get_value(options, - ?MODULE:module_info(compile), - []), - AutoList = [lager_util:make_internal_sink_name(M) - || M <- proplists:get_value(lager_extra_sinks, - CompileOptions, [])], - List = case lists:member(?LAGER_SINK, AutoList) of - true -> AutoList; - false -> [?LAGER_SINK | AutoList] - end, - %% Store the list in the application environment. If this - %% module is later cover-compiled, the compile option will - %% be lost, so we will be able to retrieve the list from the - %% application environment. - ok = application:set_env(rabbit, lager_extra_sinks, List), - List - end. + rabbit_prelaunch_early_logging:list_expected_sinks(). maybe_remove_logger_handler() -> M = logger, diff --git a/deps/rabbit/src/rabbit_log_tail.erl b/deps/rabbit/src/rabbit_log_tail.erl index 555164213bf0a908e124f674cec4b22de7c8fc3c..9fa6f7ae634894d7163bfb0cd702ae3b2e17f88b 100644 --- a/deps/rabbit/src/rabbit_log_tail.erl +++ b/deps/rabbit/src/rabbit_log_tail.erl @@ -1,3 +1,19 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + -module(rabbit_log_tail). -export([tail_n_lines/2]). @@ -92,4 +108,4 @@ read_lines_from_position(File, GuessPosition, Eof) -> end. offset(Base, N) -> - max(0, Base - N * ?GUESS_OFFSET). \ No newline at end of file + max(0, Base - N * ?GUESS_OFFSET). diff --git a/deps/rabbit/src/rabbit_mirror_queue_misc.erl b/deps/rabbit/src/rabbit_mirror_queue_misc.erl index c1ae96b02f738562d50b7fe4768682864654b833..503c0f4a9dd3bbe1254b3ebd850833ca18720e8f 100644 --- a/deps/rabbit/src/rabbit_mirror_queue_misc.erl +++ b/deps/rabbit/src/rabbit_mirror_queue_misc.erl @@ -243,11 +243,21 @@ add_mirror(QName, MirrorNode, SyncMode) -> #resource{virtual_host = VHost} = amqqueue:get_name(Q), case rabbit_vhost_sup_sup:get_vhost_sup(VHost, MirrorNode) of {ok, _} -> - SPid = rabbit_amqqueue_sup_sup:start_queue_process( + try + SPid = rabbit_amqqueue_sup_sup:start_queue_process( MirrorNode, Q, slave), - log_info(QName, "Adding mirror on node ~p: ~p~n", + log_info(QName, "Adding mirror on node ~p: ~p~n", [MirrorNode, SPid]), - rabbit_mirror_queue_slave:go(SPid, SyncMode); + rabbit_mirror_queue_slave:go(SPid, SyncMode) + of + _ -> ok + catch + error:QError -> + log_warning(QName, + "Unable to start queue mirror on node '~p'. " + "Target queue supervisor is not running: ~p~n", + [MirrorNode, QError]) + end; {error, Error} -> log_warning(QName, "Unable to start queue mirror on node '~p'. " diff --git a/deps/rabbit/src/rabbit_mnesia.erl b/deps/rabbit/src/rabbit_mnesia.erl index c1bf2f54f5ecf1c9ad5a4a7c136ac13689ddfba0..fdc5aac96269af1ee77162aebdd9330c0897a2b6 100644 --- a/deps/rabbit/src/rabbit_mnesia.erl +++ b/deps/rabbit/src/rabbit_mnesia.erl @@ -59,8 +59,6 @@ -export([init_with_lock/3]). -endif. --include("rabbit.hrl"). - %%---------------------------------------------------------------------------- -export_type([node_type/0, cluster_status/0]). @@ -99,48 +97,63 @@ init() -> ok. init_with_lock() -> - {Retries, Timeout} = rabbit_peer_discovery:retry_timeout(), - init_with_lock(Retries, Timeout, fun init_from_config/0). + {Retries, Timeout} = rabbit_peer_discovery:locking_retry_timeout(), + init_with_lock(Retries, Timeout, fun run_peer_discovery/0). -init_with_lock(0, _, InitFromConfig) -> +init_with_lock(0, _, RunPeerDiscovery) -> case rabbit_peer_discovery:lock_acquisition_failure_mode() of ignore -> - rabbit_log:warning("Cannot acquire a lock during clustering", []), - InitFromConfig(), + rabbit_log:warning("Could not acquire a peer discovery lock, out of retries", []), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register(); fail -> exit(cannot_acquire_startup_lock) end; -init_with_lock(Retries, Timeout, InitFromConfig) -> - case rabbit_peer_discovery:lock() of +init_with_lock(Retries, Timeout, RunPeerDiscovery) -> + LockResult = rabbit_peer_discovery:lock(), + rabbit_log:debug("rabbit_peer_discovery:lock returned ~p", [LockResult]), + case LockResult of not_supported -> rabbit_log:info("Peer discovery backend does not support locking, falling back to randomized delay"), %% See rabbitmq/rabbitmq-server#1202 for details. rabbit_peer_discovery:maybe_inject_randomized_delay(), - InitFromConfig(), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register(); {error, _Reason} -> timer:sleep(Timeout), - init_with_lock(Retries - 1, Timeout, InitFromConfig); + init_with_lock(Retries - 1, Timeout, RunPeerDiscovery); {ok, Data} -> try - InitFromConfig(), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register() after rabbit_peer_discovery:unlock(Data) end end. -init_from_config() -> +-spec run_peer_discovery() -> ok | {[node()], node_type()}. +run_peer_discovery() -> + {RetriesLeft, DelayInterval} = rabbit_peer_discovery:discovery_retries(), + run_peer_discovery_with_retries(RetriesLeft, DelayInterval). + +-spec run_peer_discovery_with_retries(non_neg_integer(), non_neg_integer()) -> ok | {[node()], node_type()}. +run_peer_discovery_with_retries(0, _DelayInterval) -> + ok; +run_peer_discovery_with_retries(RetriesLeft, DelayInterval) -> FindBadNodeNames = fun (Name, BadNames) when is_atom(Name) -> BadNames; (Name, BadNames) -> [Name | BadNames] end, - {DiscoveredNodes, NodeType} = + {DiscoveredNodes0, NodeType} = case rabbit_peer_discovery:discover_cluster_nodes() of + {error, Reason} -> + RetriesLeft1 = RetriesLeft - 1, + rabbit_log:error("Peer discovery returned an error: ~p. Will retry after a delay of ~b, ~b retries left...", + [Reason, DelayInterval, RetriesLeft1]), + timer:sleep(DelayInterval), + run_peer_discovery_with_retries(RetriesLeft1, DelayInterval); {ok, {Nodes, Type} = Config} - when is_list(Nodes) andalso - (Type == disc orelse Type == disk orelse Type == ram) -> + when is_list(Nodes) andalso (Type == disc orelse Type == disk orelse Type == ram) -> case lists:foldr(FindBadNodeNames, [], Nodes) of [] -> Config; BadNames -> e({invalid_cluster_node_names, BadNames}) @@ -150,6 +163,7 @@ init_from_config() -> {ok, _} -> e(invalid_cluster_nodes_conf) end, + DiscoveredNodes = lists:usort(DiscoveredNodes0), rabbit_log:info("All discovered existing cluster peers: ~s~n", [rabbit_peer_discovery:format_discovered_nodes(DiscoveredNodes)]), Peers = nodes_excl_me(DiscoveredNodes), @@ -169,6 +183,16 @@ init_from_config() -> %% reachable and compatible (in terms of Mnesia internal protocol version and such) %% cluster peers in order. join_discovered_peers(TryNodes, NodeType) -> + {RetriesLeft, DelayInterval} = rabbit_peer_discovery:discovery_retries(), + join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft, DelayInterval). + +join_discovered_peers_with_retries(TryNodes, _NodeType, 0, _DelayInterval) -> + rabbit_log:warning( + "Could not successfully contact any node of: ~s (as in Erlang distribution). " + "Starting as a blank standalone node...~n", + [string:join(lists:map(fun atom_to_list/1, TryNodes), ",")]), + init_db_and_upgrade([node()], disc, false, _Retry = true); +join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft, DelayInterval) -> case find_reachable_peer_to_cluster_with(nodes_excl_me(TryNodes)) of {ok, Node} -> rabbit_log:info("Node '~s' selected for auto-clustering~n", [Node]), @@ -177,11 +201,11 @@ join_discovered_peers(TryNodes, NodeType) -> rabbit_connection_tracking:boot(), rabbit_node_monitor:notify_joined_cluster(); none -> - rabbit_log:warning( - "Could not successfully contact any node of: ~s (as in Erlang distribution). " - "Starting as a blank standalone node...~n", - [string:join(lists:map(fun atom_to_list/1, TryNodes), ",")]), - init_db_and_upgrade([node()], disc, false, _Retry = true) + RetriesLeft1 = RetriesLeft - 1, + rabbit_log:error("Trying to join discovered peers failed. Will retry after a delay of ~b, ~b retries left...", + [DelayInterval, RetriesLeft1]), + timer:sleep(DelayInterval), + join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft1, DelayInterval) end. %% Make the node join a cluster. The node will be reset automatically @@ -992,15 +1016,15 @@ is_virgin_node() -> true; {ok, []} -> true; - {ok, [File1, File2, File3]} -> - lists:usort([filename:join(dir(), File1), - filename:join(dir(), File2), - filename:join(dir(), File3)]) =:= - lists:usort([rabbit_node_monitor:cluster_status_filename(), - rabbit_node_monitor:running_nodes_filename(), - rabbit_node_monitor:quorum_filename()]); - {ok, _} -> - false + {ok, List0} -> + IgnoredFiles0 = + [rabbit_node_monitor:cluster_status_filename(), + rabbit_node_monitor:running_nodes_filename(), + rabbit_node_monitor:quorum_filename(), + rabbit_feature_flags:enabled_feature_flags_list_file()], + IgnoredFiles = [filename:basename(File) || File <- IgnoredFiles0], + List = List0 -- IgnoredFiles, + List =:= [] end. find_reachable_peer_to_cluster_with([]) -> diff --git a/deps/rabbit/src/rabbit_mnesia_rename.erl b/deps/rabbit/src/rabbit_mnesia_rename.erl index c74a390ae2220c528d4cc52402acff7a3548d93d..5715816adb71381ca23717f5b6d3777b073ab297 100644 --- a/deps/rabbit/src/rabbit_mnesia_rename.erl +++ b/deps/rabbit/src/rabbit_mnesia_rename.erl @@ -281,4 +281,5 @@ become(BecomeNode) -> start_distribution(Name) -> rabbit_nodes:ensure_epmd(), - net_kernel:start([Name, rabbit_nodes:name_type()]). + NameType = rabbit_nodes_common:name_type(Name), + net_kernel:start([Name, NameType]). diff --git a/deps/rabbit/src/rabbit_msg_store.erl b/deps/rabbit/src/rabbit_msg_store.erl index c845575f5c559c2ce1cb069068839018ff99640f..2fd418d8a778e1cbf215d294083949644534bfe6 100644 --- a/deps/rabbit/src/rabbit_msg_store.erl +++ b/deps/rabbit/src/rabbit_msg_store.erl @@ -797,8 +797,15 @@ init([Type, BaseDir, ClientRefs, StartupFunState]) -> }, %% If we didn't recover the msg location index then we need to %% rebuild it now. + Cleanliness = case CleanShutdown of + true -> "clean"; + false -> "unclean" + end, + rabbit_log:debug("Rebuilding message location index after ~s shutdown...~n", + [Cleanliness]), {Offset, State1 = #msstate { current_file = CurFile }} = build_index(CleanShutdown, StartupFunState, State), + rabbit_log:debug("Finished rebuilding index~n", []), %% read is only needed so that we can seek {ok, CurHdl} = open_file(Dir, filenum_to_name(CurFile), [read | ?WRITE_MODE]), @@ -1734,55 +1741,26 @@ build_index(true, _StartupFunState, end, {0, State}, FileSummaryEts); build_index(false, {MsgRefDeltaGen, MsgRefDeltaGenInit}, State = #msstate { dir = Dir }) -> + rabbit_log:debug("Rebuilding message refcount...~n", []), ok = count_msg_refs(MsgRefDeltaGen, MsgRefDeltaGenInit, State), + rabbit_log:debug("Done rebuilding message refcount~n", []), {ok, Pid} = gatherer:start_link(), case [filename_to_num(FileName) || FileName <- list_sorted_filenames(Dir, ?FILE_EXTENSION)] of - [] -> build_index(Pid, undefined, [State #msstate.current_file], - State); - Files -> {Offset, State1} = build_index(Pid, undefined, Files, State), + [] -> rebuild_index(Pid, [State #msstate.current_file], + State); + Files -> {Offset, State1} = rebuild_index(Pid, Files, State), {Offset, lists:foldl(fun delete_file_if_empty/2, State1, Files)} end. -build_index(Gatherer, Left, [], - State = #msstate { file_summary_ets = FileSummaryEts, - sum_valid_data = SumValid, - sum_file_size = SumFileSize }) -> - case gatherer:out(Gatherer) of - empty -> - unlink(Gatherer), - ok = gatherer:stop(Gatherer), - ok = index_clean_up_temporary_reference_count_entries(State), - Offset = case ets:lookup(FileSummaryEts, Left) of - [] -> 0; - [#file_summary { file_size = FileSize }] -> FileSize - end, - {Offset, State #msstate { current_file = Left }}; - {value, #file_summary { valid_total_size = ValidTotalSize, - file_size = FileSize } = FileSummary} -> - true = ets:insert_new(FileSummaryEts, FileSummary), - build_index(Gatherer, Left, [], - State #msstate { - sum_valid_data = SumValid + ValidTotalSize, - sum_file_size = SumFileSize + FileSize }) - end; -build_index(Gatherer, Left, [File|Files], State) -> - ok = gatherer:fork(Gatherer), - ok = worker_pool:submit_async( - fun () -> - link(Gatherer), - ok = build_index_worker(Gatherer, State, - Left, File, Files), - unlink(Gatherer), - ok - end), - build_index(Gatherer, File, Files, State). - build_index_worker(Gatherer, State = #msstate { dir = Dir }, Left, File, Files) -> + FileName = filenum_to_name(File), + rabbit_log:debug("Rebuilding message location index from ~p (~B file(s) remaining)~n", + [form_filename(Dir, FileName), length(Files)]), {ok, Messages, FileSize} = - scan_file_for_valid_messages(Dir, filenum_to_name(File)), + scan_file_for_valid_messages(Dir, FileName), {ValidMessages, ValidTotalSize} = lists:foldl( fun (Obj = {MsgId, TotalSize, Offset}, {VMAcc, VTSAcc}) -> @@ -1811,15 +1789,62 @@ build_index_worker(Gatherer, State = #msstate { dir = Dir }, [F|_] -> {F, FileSize} end, ok = gatherer:in(Gatherer, #file_summary { - file = File, - valid_total_size = ValidTotalSize, - left = Left, - right = Right, - file_size = FileSize1, - locked = false, - readers = 0 }), + file = File, + valid_total_size = ValidTotalSize, + left = Left, + right = Right, + file_size = FileSize1, + locked = false, + readers = 0 }), ok = gatherer:finish(Gatherer). +enqueue_build_index_workers(_Gatherer, _Left, [], _State) -> + exit(normal); +enqueue_build_index_workers(Gatherer, Left, [File|Files], State) -> + ok = worker_pool:dispatch_sync( + fun () -> + link(Gatherer), + ok = build_index_worker(Gatherer, State, + Left, File, Files), + unlink(Gatherer), + ok + end), + enqueue_build_index_workers(Gatherer, File, Files, State). + +reduce_index(Gatherer, LastFile, + State = #msstate { file_summary_ets = FileSummaryEts, + sum_valid_data = SumValid, + sum_file_size = SumFileSize }) -> + case gatherer:out(Gatherer) of + empty -> + ok = gatherer:stop(Gatherer), + ok = index_clean_up_temporary_reference_count_entries(State), + Offset = case ets:lookup(FileSummaryEts, LastFile) of + [] -> 0; + [#file_summary { file_size = FileSize }] -> FileSize + end, + {Offset, State #msstate { current_file = LastFile }}; + {value, #file_summary { valid_total_size = ValidTotalSize, + file_size = FileSize } = FileSummary} -> + true = ets:insert_new(FileSummaryEts, FileSummary), + reduce_index(Gatherer, LastFile, + State #msstate { + sum_valid_data = SumValid + ValidTotalSize, + sum_file_size = SumFileSize + FileSize }) + end. + +rebuild_index(Gatherer, Files, State) -> + lists:foreach(fun (_File) -> + ok = gatherer:fork(Gatherer) + end, Files), + Pid = spawn( + fun () -> + enqueue_build_index_workers(Gatherer, undefined, + Files, State) + end), + erlang:monitor(process, Pid), + reduce_index(Gatherer, lists:last(Files), State). + %%---------------------------------------------------------------------------- %% garbage collection / compaction / aggregation -- internal %%---------------------------------------------------------------------------- diff --git a/deps/rabbit/src/rabbit_nodes.erl b/deps/rabbit/src/rabbit_nodes.erl index eb582c69f50605eda4f898ca04ce53d57f5d4d40..787d84c4f449ff436afcc944389dec3f95c165b2 100644 --- a/deps/rabbit/src/rabbit_nodes.erl +++ b/deps/rabbit/src/rabbit_nodes.erl @@ -17,7 +17,7 @@ -module(rabbit_nodes). --export([names/1, diagnostics/1, make/1, parts/1, cookie_hash/0, +-export([names/1, diagnostics/1, make/1, make/2, parts/1, cookie_hash/0, is_running/2, is_process_running/2, cluster_name/0, set_cluster_name/1, set_cluster_name/2, ensure_epmd/0, all_running/0, name_type/0, running_count/0, @@ -41,10 +41,8 @@ boot() -> seed_user_provided_cluster_name(). name_type() -> - case os:getenv("RABBITMQ_USE_LONGNAME") of - "true" -> longnames; - _ -> shortnames - end. + #{nodename_type := NodeType} = rabbit_prelaunch:get_context(), + NodeType. -spec names(string()) -> rabbit_types:ok_or_error2([{string(), integer()}], term()). @@ -57,8 +55,11 @@ names(Hostname) -> diagnostics(Nodes) -> rabbit_nodes_common:diagnostics(Nodes). -make(NodeStr) -> - rabbit_nodes_common:make(NodeStr). +make(NameOrParts) -> + rabbit_nodes_common:make(NameOrParts). + +make(ShortName, Hostname) -> + make({ShortName, Hostname}). parts(NodeStr) -> rabbit_nodes_common:parts(NodeStr). diff --git a/deps/rabbit/src/rabbit_os_signal_handler.erl b/deps/rabbit/src/rabbit_os_signal_handler.erl deleted file mode 100644 index 8e4a80f4816549e950cd9b86820fe2a5ff57c62f..0000000000000000000000000000000000000000 --- a/deps/rabbit/src/rabbit_os_signal_handler.erl +++ /dev/null @@ -1,60 +0,0 @@ --module(rabbit_os_signal_handler). - --behaviour(gen_event). - --export([start_link/0, boot/0, init/1, - handle_event/2, handle_call/2, handle_info/2, - terminate/2]). - -boot() -> - case os:type() of - {unix, _} -> - rabbit_sup:start_restartable_child(rabbit_os_signal_handler); - _ -> - rabbit_log:info("Will not override OS signal event handler (erl_signal_server) on this OS"), - ok - end. - -%% CAUTION: Signal handling in this module must be kept consistent -%% with the same handling in rabbitmq-server(8). - -start_link() -> - rabbit_log:info("Swapping OS signal event handler (erl_signal_server) for our own"), - %% delete any previous incarnations, otherwise we would be accumulating - %% handlers - _ = gen_event:delete_handler(erl_signal_server, ?MODULE, []), - %% swap the standard OTP signal handler if there is one - ok = gen_event:swap_sup_handler( - erl_signal_server, - %% what to swap - {erl_signal_handler, []}, - %% new event handler - {?MODULE, []}), - gen_event:start_link({local, ?MODULE}). - -init(_) -> - ok = os:set_signal(sigterm, handle), - ok = os:set_signal(sighup, ignore), - ok = os:set_signal(sigtstp, ignore), - {ok, #{}}. - -handle_event(sigterm, State) -> - error_logger:info_msg("Received a SIGTERM, will shut down gracefully"), - rabbit:stop_and_halt(), - {ok, State}; -handle_event(Msg, S) -> - %% Delegate all unknown events to the default OTP signal handler. - %% FIXME: We call erl_signal_handler's internal functions, this is - %% fragile. - {ok, ESHState} = erl_signal_handler:init(undefined), - _ = erl_signal_handler:handle_event(Msg, ESHState), - {ok, S}. - -handle_info(_, State) -> - {ok, State}. - -handle_call(_Request, State) -> - {ok, ok, State}. - -terminate(_Args, _State) -> - ok. diff --git a/deps/rabbit/src/rabbit_peer_discovery.erl b/deps/rabbit/src/rabbit_peer_discovery.erl index 077a2993a5719be2872f737438b4e31a8b576b81..ef62e022415d7ed58cc2671f7203a7ca78cdbbad 100644 --- a/deps/rabbit/src/rabbit_peer_discovery.erl +++ b/deps/rabbit/src/rabbit_peer_discovery.erl @@ -23,21 +23,28 @@ -export([maybe_init/0, discover_cluster_nodes/0, backend/0, node_type/0, normalize/1, format_discovered_nodes/1, log_configured_backend/0, register/0, unregister/0, maybe_register/0, maybe_unregister/0, - maybe_inject_randomized_delay/0, lock/0, unlock/1]). --export([append_node_prefix/1, node_prefix/0, retry_timeout/0, + maybe_inject_randomized_delay/0, lock/0, unlock/1, + discovery_retries/0]). +-export([append_node_prefix/1, node_prefix/0, locking_retry_timeout/0, lock_acquisition_failure_mode/0]). -define(DEFAULT_BACKEND, rabbit_peer_discovery_classic_config). + %% what node type is used by default for this node when joining %% a new cluster as a virgin node -define(DEFAULT_NODE_TYPE, disc). + %% default node prefix to attach to discovered hostnames -define(DEFAULT_PREFIX, "rabbit"). + %% default randomized delay range, in seconds -define(DEFAULT_STARTUP_RANDOMIZED_DELAY, {5, 60}). --define(NODENAME_PART_SEPARATOR, "@"). +%% default discovery retries and interval. +-define(DEFAULT_DISCOVERY_RETRY_COUNT, 10). +-define(DEFAULT_DISCOVERY_RETRY_INTERVAL_MS, 500). +-define(NODENAME_PART_SEPARATOR, "@"). -spec backend() -> atom(). @@ -61,9 +68,9 @@ node_type() -> ?DEFAULT_NODE_TYPE end. --spec retry_timeout() -> {Retries :: integer(), Timeout :: integer()}. +-spec locking_retry_timeout() -> {Retries :: integer(), Timeout :: integer()}. -retry_timeout() -> +locking_retry_timeout() -> case application:get_env(rabbit, cluster_formation) of {ok, Proplist} -> Retries = proplists:get_value(lock_retry_limit, Proplist, 10), @@ -90,18 +97,21 @@ log_configured_backend() -> maybe_init() -> Backend = backend(), + code:ensure_loaded(Backend), case erlang:function_exported(Backend, init, 0) of true -> - rabbit_log:debug("Peer discovery backend supports initialisation."), + rabbit_log:debug("Peer discovery backend supports initialisation"), case Backend:init() of ok -> - rabbit_log:debug("Peer discovery backend initialisation succeeded."), + rabbit_log:debug("Peer discovery backend initialisation succeeded"), ok; {error, Error} -> rabbit_log:warning("Peer discovery backend initialisation failed: ~p.", [Error]), ok end; - false -> ok + false -> + rabbit_log:debug("Peer discovery backend does not support initialisation"), + ok end. @@ -146,6 +156,18 @@ maybe_unregister() -> ok end. +-spec discovery_retries() -> {Retries :: integer(), Interval :: integer()}. + +discovery_retries() -> + case application:get_env(rabbit, cluster_formation) of + {ok, Proplist} -> + Retries = proplists:get_value(discovery_retry_limit, Proplist, ?DEFAULT_DISCOVERY_RETRY_COUNT), + Interval = proplists:get_value(discovery_retry_interval, Proplist, ?DEFAULT_DISCOVERY_RETRY_INTERVAL_MS), + {Retries, Interval}; + undefined -> + {?DEFAULT_DISCOVERY_RETRY_COUNT, ?DEFAULT_DISCOVERY_RETRY_INTERVAL_MS} + end. + -spec maybe_inject_randomized_delay() -> ok. maybe_inject_randomized_delay() -> @@ -228,7 +250,7 @@ unregister() -> ok end. --spec lock() -> ok | {ok, Data :: term()} | not_supported | {error, Reason :: string()}. +-spec lock() -> {ok, Data :: term()} | not_supported | {error, Reason :: string()}. lock() -> Backend = backend(), diff --git a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl index 6f656530e33b1e93fabea2ad623cacdcd5cf3cb0..360dcf6a9a00bf1bbd988e67e5c2e0a40f539162 100644 --- a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl +++ b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl @@ -26,7 +26,8 @@ %% API %% --spec list_nodes() -> {ok, {Nodes :: [node()], rabbit_types:node_type()}}. +-spec list_nodes() -> {ok, {Nodes :: [node()], rabbit_types:node_type()}} | + {error, Reason :: string()}. list_nodes() -> case application:get_env(rabbit, cluster_nodes, {[], disc}) of @@ -37,7 +38,9 @@ list_nodes() -> -spec supports_registration() -> boolean(). supports_registration() -> - false. + %% If we don't have any nodes configured, skip randomized delay and similar operations + %% as we don't want to delay startup for no reason. MK. + has_any_peer_nodes_configured(). -spec register() -> ok. @@ -63,3 +66,19 @@ lock(_Node) -> unlock(_Data) -> ok. + +%% +%% Helpers +%% + +has_any_peer_nodes_configured() -> + case application:get_env(rabbit, cluster_nodes, []) of + {[], _NodeType} -> + false; + {Nodes, _NodeType} when is_list(Nodes) -> + true; + [] -> + false; + Nodes when is_list(Nodes) -> + true + end. diff --git a/deps/rabbit/src/rabbit_plugins.erl b/deps/rabbit/src/rabbit_plugins.erl index f4e3f66ea2d3b0468d376f70bc522d60a30c846b..bacb5e839145da8fc058da75af975e9183303d67 100644 --- a/deps/rabbit/src/rabbit_plugins.erl +++ b/deps/rabbit/src/rabbit_plugins.erl @@ -20,10 +20,9 @@ -export([setup/0, active/0, read_enabled/1, list/1, list/2, dependencies/3, running_plugins/0]). -export([ensure/1]). --export([extract_schemas/1]). -export([validate_plugins/1, format_invalid_plugins/1]). -export([is_strictly_plugin/1, strictly_plugins/2, strictly_plugins/1]). --export([plugins_dir/0, plugins_expand_dir/0, enabled_plugins_file/0]). +-export([plugins_dir/0, plugin_names/1, plugins_expand_dir/0, enabled_plugins_file/0]). % Export for testing purpose. -export([is_version_supported/2, validate_plugins/2]). @@ -49,7 +48,6 @@ ensure1(FileJustChanged0) -> FileJustChanged -> Enabled = read_enabled(OurFile), Wanted = prepare_plugins(Enabled), - rabbit_config:prepare_and_use_config(), Current = active(), Start = Wanted -- Current, Stop = Current -- Wanted, @@ -132,50 +130,6 @@ setup() -> Enabled = enabled_plugins(), prepare_plugins(Enabled). -extract_schemas(SchemaDir) -> - application:load(rabbit), - {ok, EnabledFile} = application:get_env(rabbit, enabled_plugins_file), - Enabled = read_enabled(EnabledFile), - - {ok, PluginsDistDir} = application:get_env(rabbit, plugins_dir), - - AllPlugins = list(PluginsDistDir), - Wanted = dependencies(false, Enabled, AllPlugins), - WantedPlugins = lookup_plugins(Wanted, AllPlugins), - [ extract_schema(Plugin, SchemaDir) || Plugin <- WantedPlugins ], - application:unload(rabbit), - ok. - -extract_schema(#plugin{type = ez, location = Location}, SchemaDir) -> - {ok, Files} = zip:extract(Location, - [memory, {file_filter, - fun(#zip_file{name = Name}) -> - string:str(Name, "priv/schema") > 0 - end}]), - lists:foreach( - fun({FileName, Content}) -> - ok = file:write_file(filename:join([SchemaDir, - filename:basename(FileName)]), - Content) - end, - Files), - ok; -extract_schema(#plugin{type = dir, location = Location}, SchemaDir) -> - PluginSchema = filename:join([Location, - "priv", - "schema"]), - case rabbit_file:is_dir(PluginSchema) of - false -> ok; - true -> - PluginSchemaFiles = - [ filename:join(PluginSchema, FileName) - || FileName <- rabbit_file:wildcard(".*\\.schema", - PluginSchema) ], - [ file:copy(SchemaFile, SchemaDir) - || SchemaFile <- PluginSchemaFiles ] - end. - - %% @doc Lists the plugins which are currently running. -spec active() -> [plugin_name()]. diff --git a/deps/rabbit/src/rabbit_prelaunch.erl b/deps/rabbit/src/rabbit_prelaunch.erl deleted file mode 100644 index 51deb0f0eae9c26f5d94d7ef91ddecfad7958a62..0000000000000000000000000000000000000000 --- a/deps/rabbit/src/rabbit_prelaunch.erl +++ /dev/null @@ -1,161 +0,0 @@ -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License -%% at https://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and -%% limitations under the License. -%% -%% The Original Code is RabbitMQ. -%% -%% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2019 Pivotal Software, Inc. All rights reserved. -%% - --module(rabbit_prelaunch). - --export([start/0, stop/0]). --export([config_file_check/0]). - --import(rabbit_misc, [pget/2, pget/3]). - --include("rabbit.hrl"). - --define(SET_DIST_PORT, 0). --define(ERROR_CODE, 1). --define(DO_NOT_SET_DIST_PORT, 2). --define(EX_USAGE, 64). - -%%---------------------------------------------------------------------------- - --spec start() -> no_return(). - -start() -> - case init:get_plain_arguments() of - [NodeStr] -> - Node = rabbit_nodes:make(NodeStr), - {NodeName, NodeHost} = rabbit_nodes:parts(Node), - ok = duplicate_node_check(NodeName, NodeHost), - ok = dist_port_set_check(), - ok = dist_port_range_check(), - ok = dist_port_use_check(NodeHost), - ok = config_file_check(); - [] -> - %% Ignore running node while installing windows service - ok = dist_port_set_check(), - ok - end, - rabbit_misc:quit(?SET_DIST_PORT), - ok. - --spec stop() -> 'ok'. - -stop() -> - ok. - -%%---------------------------------------------------------------------------- - -config_file_check() -> - case rabbit_config:validate_config_files() of - ok -> ok; - {error, {ErrFmt, ErrArgs}} -> - ErrMsg = io_lib:format(ErrFmt, ErrArgs), - {{Year, Month, Day}, {Hour, Minute, Second, Milli}} = lager_util:localtime_ms(), - io:format(standard_error, "~b-~2..0b-~2..0b ~2..0b:~2..0b:~2..0b.~b [error] ~s", - [Year, Month, Day, Hour, Minute, Second, Milli, ErrMsg]), - rabbit_misc:quit(?EX_USAGE) - end. - -%% Check whether a node with the same name is already running -duplicate_node_check(NodeName, NodeHost) -> - case rabbit_nodes:names(NodeHost) of - {ok, NamePorts} -> - case proplists:is_defined(NodeName, NamePorts) of - true -> io:format( - "ERROR: node with name ~p already running on ~p~n", - [NodeName, NodeHost]), - rabbit_misc:quit(?ERROR_CODE); - false -> ok - end; - {error, EpmdReason} -> - io:format("ERROR: epmd error for host ~s: ~s~n", - [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]), - rabbit_misc:quit(?ERROR_CODE) - end. - -dist_port_set_check() -> - case get_config(os:getenv("RABBITMQ_CONFIG_ARG_FILE")) of - {ok, [Config]} -> - Kernel = pget(kernel, Config, []), - case {pget(inet_dist_listen_min, Kernel, none), - pget(inet_dist_listen_max, Kernel, none)} of - {none, none} -> ok; - _ -> rabbit_misc:quit(?DO_NOT_SET_DIST_PORT) - end; - {ok, _} -> - ok; - {error, _} -> - ok - end. - -get_config("") -> {error, nofile}; -get_config(File) -> - case consult_file(File) of - {ok, Contents} -> {ok, Contents}; - {error, _} = E -> E - end. - -consult_file(false) -> {error, nofile}; -consult_file(File) -> - FileName = case filename:extension(File) of - "" -> File ++ ".config"; - ".config" -> File; - _ -> "" - end, - file:consult(FileName). - -dist_port_range_check() -> - case os:getenv("RABBITMQ_DIST_PORT") of - false -> ok; - PortStr -> case catch list_to_integer(PortStr) of - Port when is_integer(Port) andalso Port > 65535 -> - rabbit_misc:quit(?DO_NOT_SET_DIST_PORT); - _ -> - ok - end - end. - -dist_port_use_check(NodeHost) -> - case os:getenv("RABBITMQ_DIST_PORT") of - false -> ok; - PortStr -> Port = list_to_integer(PortStr), - dist_port_use_check_ipv4(NodeHost, Port) - end. - -dist_port_use_check_ipv4(NodeHost, Port) -> - case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of - {ok, Sock} -> gen_tcp:close(Sock); - {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); - {error, _} -> dist_port_use_check_fail(Port, NodeHost) - end. - -dist_port_use_check_ipv6(NodeHost, Port) -> - case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of - {ok, Sock} -> gen_tcp:close(Sock); - {error, _} -> dist_port_use_check_fail(Port, NodeHost) - end. - --spec dist_port_use_check_fail(non_neg_integer(), string()) -> - no_return(). - -dist_port_use_check_fail(Port, Host) -> - {ok, Names} = rabbit_nodes:names(Host), - case [N || {N, P} <- Names, P =:= Port] of - [] -> io:format("ERROR: distribution port ~b in use on ~s " - "(by non-Erlang process?)~n", [Port, Host]); - [Name] -> io:format("ERROR: distribution port ~b in use by ~s@~s~n", - [Port, Name, Host]) - end, - rabbit_misc:quit(?ERROR_CODE). diff --git a/deps/rabbit/src/rabbit_prelaunch_cluster.erl b/deps/rabbit/src/rabbit_prelaunch_cluster.erl new file mode 100644 index 0000000000000000000000000000000000000000..9d3cda99e385e487716a32011e794c0e1ff7f6bd --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_cluster.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_cluster). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Clustering =="), + rabbit_log_prelaunch:debug("Preparing cluster status files"), + rabbit_node_monitor:prepare_cluster_status_files(), + case Context of + #{initial_pass := true} -> + rabbit_log_prelaunch:debug("Upgrading Mnesia schema"), + ok = rabbit_upgrade:maybe_upgrade_mnesia(); + _ -> + ok + end, + %% It's important that the consistency check happens after + %% the upgrade, since if we are a secondary node the + %% primary node will have forgotten us + rabbit_log_prelaunch:debug("Checking cluster consistency"), + rabbit_mnesia:check_cluster_consistency(), + ok. diff --git a/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl new file mode 100644 index 0000000000000000000000000000000000000000..c9c133f3b14edbece7fccdc9e0323248e8881fd5 --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl @@ -0,0 +1,62 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_enabled_plugins_file). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Enabled plugins file =="), + update_enabled_plugins_file(Context). + +%% ------------------------------------------------------------------- +%% `enabled_plugins` file content initialization. +%% ------------------------------------------------------------------- + +update_enabled_plugins_file(#{enabled_plugins := undefined}) -> + ok; +update_enabled_plugins_file(#{enabled_plugins := all, + plugins_path := Path} = Context) -> + List = [P#plugin.name || P <- rabbit_plugins:list(Path)], + do_update_enabled_plugins_file(Context, List); +update_enabled_plugins_file(#{enabled_plugins := List} = Context) -> + do_update_enabled_plugins_file(Context, List). + +do_update_enabled_plugins_file(#{enabled_plugins_file := File}, List) -> + SortedList = lists:usort(List), + case SortedList of + [] -> + rabbit_log_prelaunch:debug("Marking all plugins as disabled"); + _ -> + rabbit_log_prelaunch:debug( + "Marking the following plugins as enabled:"), + [rabbit_log_prelaunch:debug(" - ~s", [P]) || P <- SortedList] + end, + Content = io_lib:format("~p.~n", [SortedList]), + case file:write_file(File, Content) of + ok -> + rabbit_log_prelaunch:debug("Wrote plugins file: ~ts", [File]), + ok; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to update enabled plugins file \"~ts\" " + "from $RABBITMQ_ENABLED_PLUGINS: ~ts", + [File, file:format_error(Reason)]), + throw({error, failed_to_update_enabled_plugins_file}) + end. diff --git a/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl new file mode 100644 index 0000000000000000000000000000000000000000..5123d0b28cc7b6422609861c809794a16044260e --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl @@ -0,0 +1,41 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_feature_flags). + +-export([setup/1]). + +setup(#{feature_flags_file := FFFile}) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Feature flags =="), + case filelib:ensure_dir(FFFile) of + ok -> + rabbit_log_prelaunch:debug("Initializing feature flags registry"), + case rabbit_feature_flags:initialize_registry() of + ok -> + ok; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to initialize feature flags registry: ~p", + [Reason]), + throw({error, failed_to_initialize_feature_flags_registry}) + end; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to create feature flags file \"~ts\" directory: ~ts", + [FFFile, file:format_error(Reason)]), + throw({error, failed_to_create_feature_flags_file_directory}) + end. diff --git a/deps/rabbit/src/rabbit_prelaunch_hipe.erl b/deps/rabbit/src/rabbit_prelaunch_hipe.erl new file mode 100644 index 0000000000000000000000000000000000000000..9357368c07495c756696cce20c46d88a4c83e207 --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_hipe.erl @@ -0,0 +1,26 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_hipe). + +-export([setup/1]). + +setup(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== HiPE compitation =="), + HipeResult = rabbit_hipe:maybe_hipe_compile(), + rabbit_hipe:log_hipe_result(HipeResult), + ok. diff --git a/deps/rabbit/src/rabbit_prelaunch_logging.erl b/deps/rabbit/src/rabbit_prelaunch_logging.erl new file mode 100644 index 0000000000000000000000000000000000000000..02903bf081306d3b850af722367dd9c42468e65e --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_logging.erl @@ -0,0 +1,84 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_logging). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Logging =="), + ok = set_ERL_CRASH_DUMP_envvar(Context), + ok = configure_lager(Context). + +set_ERL_CRASH_DUMP_envvar(#{log_base_dir := LogBaseDir}) -> + case os:getenv("ERL_CRASH_DUMP") of + false -> + ErlCrashDump = filename:join(LogBaseDir, "erl_crash.dump"), + rabbit_log_prelaunch:debug( + "Setting $ERL_CRASH_DUMP environment variable to \"~ts\"", + [ErlCrashDump]), + os:putenv("ERL_CRASH_DUMP", ErlCrashDump), + ok; + ErlCrashDump -> + rabbit_log_prelaunch:debug( + "$ERL_CRASH_DUMP environment variable already set to \"~ts\"", + [ErlCrashDump]), + ok + end. + +configure_lager(#{log_base_dir := LogBaseDir, + main_log_file := MainLog, + upgrade_log_file := UpgradeLog} = Context) -> + {SaslErrorLogger, + MainLagerHandler, + UpgradeLagerHandler} = case MainLog of + "-" -> + %% Log to STDOUT. + rabbit_log_prelaunch:debug( + "Logging to stdout"), + {tty, + tty, + tty}; + _ -> + rabbit_log_prelaunch:debug( + "Logging to:"), + [rabbit_log_prelaunch:debug( + " - ~ts", [Log]) + || Log <- [MainLog, UpgradeLog]], + %% Log to file. + {false, + MainLog, + UpgradeLog} + end, + + ok = application:set_env(lager, crash_log, "log/crash.log"), + + Fun = fun({App, Var, Value}) -> + case application:get_env(App, Var) of + undefined -> ok = application:set_env(App, Var, Value); + _ -> ok + end + end, + Vars = [{sasl, sasl_error_logger, SaslErrorLogger}, + {rabbit, lager_log_root, LogBaseDir}, + {rabbit, lager_default_file, MainLagerHandler}, + {rabbit, lager_upgrade_file, UpgradeLagerHandler}], + lists:foreach(Fun, Vars), + + ok = rabbit_lager:start_logger(), + + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context, false). diff --git a/deps/rabbit/src/rabbit_queue_index.erl b/deps/rabbit/src/rabbit_queue_index.erl index 42995685f67d658ad2d5813d8deadf98c3a0df46..dd7e973905ac6a69f2c4675a784cc9e35c3454a8 100644 --- a/deps/rabbit/src/rabbit_queue_index.erl +++ b/deps/rabbit/src/rabbit_queue_index.erl @@ -717,7 +717,6 @@ queue_index_walker({start, DurableQueues}) when is_list(DurableQueues) -> queue_index_walker({next, Gatherer}) when is_pid(Gatherer) -> case gatherer:out(Gatherer) of empty -> - unlink(Gatherer), ok = gatherer:stop(Gatherer), finished; {value, {MsgId, Count}} -> @@ -1432,7 +1431,6 @@ foreach_queue_index(Funs) -> end) end || QueueDirName <- QueueDirNames], empty = gatherer:out(Gatherer), - unlink(Gatherer), ok = gatherer:stop(Gatherer). transform_queue(Dir, Gatherer, {JournalFun, SegmentFun}) -> diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl index ca7a2eadb14de3381a17cb71f7c11824f8121e5d..0841821ae92fe62d5f7077ce48a9705dab3dfc3a 100644 --- a/deps/rabbit/src/rabbit_quorum_queue.erl +++ b/deps/rabbit/src/rabbit_quorum_queue.erl @@ -198,11 +198,7 @@ cancel_consumer_handler(QName, {ConsumerTag, ChPid}) -> cancel_consumer(QName, ChPid, ConsumerTag) -> catch rabbit_core_metrics:consumer_deleted(ChPid, ConsumerTag, QName), - rabbit_event:notify(consumer_deleted, - [{consumer_tag, ConsumerTag}, - {channel, ChPid}, - {queue, QName}, - {user_who_performed_action, ?INTERNAL_USER}]). + emit_consumer_deleted(ChPid, ConsumerTag, QName, ?INTERNAL_USER). local_or_remote_handler(ChPid, Module, Function, Args) -> Node = node(ChPid), @@ -618,7 +614,8 @@ basic_get(Q, NoAck, CTag0, QState0) when ?amqqueue_is_quorum(Q) -> rabbit_types:ctag(), ExclusiveConsume :: boolean(), Args :: rabbit_framing:amqp_table(), ActingUser :: binary(), any(), rabbit_fifo_client:state()) -> - {'ok', rabbit_fifo_client:state()}. + {'ok', rabbit_fifo_client:state()} | + {error, timeout | term()}. basic_consume(Q, NoAck, ChPid, ConsumerPrefetchCount, ConsumerTag0, ExclusiveConsume, Args, @@ -636,7 +633,8 @@ basic_consume(Q, NoAck, ChPid, Other -> Other end, %% consumer info is used to describe the consumer properties - ConsumerMeta = #{ack => not NoAck, + AckRequired = not NoAck, + ConsumerMeta = #{ack => AckRequired, prefetch => ConsumerPrefetchCount, args => Args, username => ActingUser}, @@ -647,7 +645,6 @@ basic_consume(Q, NoAck, ChPid, case ra:local_query(QPid, fun rabbit_fifo:query_single_active_consumer/1) of {ok, {_, SacResult}, _} -> - SingleActiveConsumerOn = single_active_consumer_on(Q), {IsSingleActiveConsumer, ActivityStatus} = case {SingleActiveConsumerOn, SacResult} of {false, _} -> @@ -657,12 +654,14 @@ basic_consume(Q, NoAck, ChPid, _ -> {false, waiting} end, - - %% TODO: emit as rabbit_fifo effect - rabbit_core_metrics:consumer_created(ChPid, ConsumerTag, ExclusiveConsume, - not NoAck, QName, - ConsumerPrefetchCount, IsSingleActiveConsumer, - ActivityStatus, Args), + rabbit_core_metrics:consumer_created( + ChPid, ConsumerTag, ExclusiveConsume, + AckRequired, QName, + ConsumerPrefetchCount, IsSingleActiveConsumer, + ActivityStatus, Args), + emit_consumer_created(ChPid, ConsumerTag, ExclusiveConsume, + AckRequired, QName, Prefetch, + Args, none, ActingUser), {ok, QState}; {error, Error} -> Error; @@ -677,6 +676,25 @@ basic_cancel(ConsumerTag, ChPid, OkMsg, QState0) -> maybe_send_reply(ChPid, OkMsg), rabbit_fifo_client:cancel_checkout(quorum_ctag(ConsumerTag), QState0). +emit_consumer_created(ChPid, CTag, Exclusive, AckRequired, QName, PrefetchCount, Args, Ref, ActingUser) -> + rabbit_event:notify(consumer_created, + [{consumer_tag, CTag}, + {exclusive, Exclusive}, + {ack_required, AckRequired}, + {channel, ChPid}, + {queue, QName}, + {prefetch_count, PrefetchCount}, + {arguments, Args}, + {user_who_performed_action, ActingUser}], + Ref). + +emit_consumer_deleted(ChPid, ConsumerTag, QName, ActingUser) -> + rabbit_event:notify(consumer_deleted, + [{consumer_tag, ConsumerTag}, + {channel, ChPid}, + {queue, QName}, + {user_who_performed_action, ActingUser}]). + -spec stateless_deliver(amqqueue:ra_server_id(), rabbit_types:delivery()) -> 'ok'. stateless_deliver(ServerId, Delivery) -> diff --git a/deps/rabbit/src/rabbit_reader.erl b/deps/rabbit/src/rabbit_reader.erl index 39977dca1f4aab9083161b3fa2813699a0fc1115..f2114b682643a338d7e2cd46dca9db14dba4db87 100644 --- a/deps/rabbit/src/rabbit_reader.erl +++ b/deps/rabbit/src/rabbit_reader.erl @@ -1560,14 +1560,10 @@ ssl_info(F, #v1{sock = Sock}) -> {error, _} -> ''; {ok, Items} -> P = proplists:get_value(protocol, Items), - CS = proplists:get_value(cipher_suite, Items), - %% The first form is R14. - %% The second is R13 - the extra term is exportability (by - %% inspection, the docs are wrong). - case CS of - {K, C, H} -> F({P, {K, C, H}}); - {K, C, H, _} -> F({P, {K, C, H}}) - end + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value(selected_cipher_suite, Items), + F({P, {K, C, H}}) end. cert_info(F, #v1{sock = Sock}) -> @@ -1583,7 +1579,7 @@ maybe_emit_stats(State) -> emit_stats(State) -> [{_, Pid}, {_, Recv_oct}, {_, Send_oct}, {_, Reductions}] = I - = infos(?SIMPLE_METRICS, State), + = infos(?SIMPLE_METRICS, State), Infos = infos(?OTHER_METRICS, State), rabbit_core_metrics:connection_stats(Pid, Infos), rabbit_core_metrics:connection_stats(Pid, Recv_oct, Send_oct, Reductions), diff --git a/deps/rabbit/src/rabbit_runtime_parameters.erl b/deps/rabbit/src/rabbit_runtime_parameters.erl index 17f9949c4b7486b900307bb79a805e3146372aa3..1a3981c63aac653cc24a7627fcacea9c8d787a82 100644 --- a/deps/rabbit/src/rabbit_runtime_parameters.erl +++ b/deps/rabbit/src/rabbit_runtime_parameters.erl @@ -130,6 +130,7 @@ parse_set_global(Name, String, ActingUser) -> set_global(Name, Term, ActingUser) -> NameAsAtom = rabbit_data_coercion:to_atom(Name), + rabbit_log:debug("Setting global parameter '~s' to ~p", [NameAsAtom, Term]), mnesia_update(NameAsAtom, Term), event_notify(parameter_set, none, global, [{name, NameAsAtom}, {value, Term}, diff --git a/deps/rabbit/src/rabbit_ssl.erl b/deps/rabbit/src/rabbit_ssl.erl index 36e7b0445251830609846cabfbb8116724ea2332..9038fdb4a2e1c39912e99f9b87f0ff08263281af 100644 --- a/deps/rabbit/src/rabbit_ssl.erl +++ b/deps/rabbit/src/rabbit_ssl.erl @@ -108,9 +108,10 @@ format_cipher_openssl22(Cipher) -> format_cipher_openssl21(Cipher) -> ssl_cipher_format:suite_to_str(Cipher). --spec get_highest_protocol_version() -> tls_record:tls_version(). +-spec get_highest_protocol_version() -> tls_record:tls_atom_version(). get_highest_protocol_version() -> - tls_record:highest_protocol_version([]). + tls_record:protocol_version( + tls_record:highest_protocol_version([])). %%-------------------------------------------------------------------------- %% High-level functions used by reader diff --git a/deps/rabbit/src/rabbit_table.erl b/deps/rabbit/src/rabbit_table.erl index e4eba164c0ea819427ed88b90292de3ed04fab76..b7bd41302f4218b3f8ba30b207ca1848640b85f1 100644 --- a/deps/rabbit/src/rabbit_table.erl +++ b/deps/rabbit/src/rabbit_table.erl @@ -106,12 +106,15 @@ wait(TableNames, Timeout, Retries) -> ok -> ok; {timeout, BadTabs} -> - {error, {timeout_waiting_for_tables, BadTabs}}; + AllNodes = rabbit_mnesia:cluster_nodes(all), + {error, {timeout_waiting_for_tables, AllNodes, BadTabs}}; {error, Reason} -> - {error, {failed_waiting_for_tables, Reason}} + AllNodes = rabbit_mnesia:cluster_nodes(all), + {error, {failed_waiting_for_tables, AllNodes, Reason}} end, case {Retries, Result} of {_, ok} -> + rabbit_log:info("Successfully synced tables from a peer"), ok; {1, {error, _} = Error} -> throw(Error); diff --git a/deps/rabbit/src/rabbit_upgrade_preparation.erl b/deps/rabbit/src/rabbit_upgrade_preparation.erl new file mode 100644 index 0000000000000000000000000000000000000000..2ff422102c893d34990b796972485d50ecde28d8 --- /dev/null +++ b/deps/rabbit/src/rabbit_upgrade_preparation.erl @@ -0,0 +1,60 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_upgrade_preparation). + +-export([await_online_quorum_plus_one/1, await_online_synchronised_mirrors/1]). + +%% +%% API +%% + +-define(SAMPLING_INTERVAL, 200). + +await_online_quorum_plus_one(Timeout) -> + Iterations = ceil(Timeout / ?SAMPLING_INTERVAL), + do_await_safe_online_quorum(Iterations). + + +await_online_synchronised_mirrors(Timeout) -> + Iterations = ceil(Timeout / ?SAMPLING_INTERVAL), + do_await_online_synchronised_mirrors(Iterations). + + +%% +%% Implementation +%% + +do_await_safe_online_quorum(0) -> + false; +do_await_safe_online_quorum(IterationsLeft) -> + case rabbit_quorum_queue:list_with_minimum_quorum() of + [] -> true; + List when is_list(List) -> + timer:sleep(?SAMPLING_INTERVAL), + do_await_safe_online_quorum(IterationsLeft - 1) + end. + + +do_await_online_synchronised_mirrors(0) -> + false; +do_await_online_synchronised_mirrors(IterationsLeft) -> + case rabbit_amqqueue:list_local_mirrored_classic_without_synchronised_mirrors() of + [] -> true; + List when is_list(List) -> + timer:sleep(?SAMPLING_INTERVAL), + do_await_online_synchronised_mirrors(IterationsLeft - 1) + end. diff --git a/deps/rabbit/src/rabbit_vhost.erl b/deps/rabbit/src/rabbit_vhost.erl index 8914197aaf0ce5e129cd2a5534507f32760c7fe2..22267b02b1b555c9002c780c17e851e543bba99b 100644 --- a/deps/rabbit/src/rabbit_vhost.erl +++ b/deps/rabbit/src/rabbit_vhost.erl @@ -366,7 +366,7 @@ update(VHost, Fun) -> end. set_limits(VHost, undefined) -> - vhost:set_limits(VHost, undefined); + vhost:set_limits(VHost, []); set_limits(VHost, Limits) -> vhost:set_limits(VHost, Limits). diff --git a/deps/rabbit_common/LICENSE-MPL-RabbitMQ b/deps/rabbit_common/LICENSE-MPL-RabbitMQ index c992fc15ea3deacafc98d55ce71477d4e0d12a9a..ff8e874f04773efe3813db7b3ca2d5ca5e617855 100644 --- a/deps/rabbit_common/LICENSE-MPL-RabbitMQ +++ b/deps/rabbit_common/LICENSE-MPL-RabbitMQ @@ -447,7 +447,7 @@ EXHIBIT A -Mozilla Public License. The Original Code is RabbitMQ Management Plugin. The Initial Developer of the Original Code is GoPivotal, Inc. - Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved.'' + Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved.'' [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should diff --git a/deps/rabbit_common/Makefile b/deps/rabbit_common/Makefile index ab179125fe75500b809b721b5afb94d4a7e30658..56f810484e61c0bb16d15813020ee0a6dbbf363d 100644 --- a/deps/rabbit_common/Makefile +++ b/deps/rabbit_common/Makefile @@ -18,7 +18,7 @@ endef LOCAL_DEPS = compiler crypto public_key sasl ssl syntax_tools tools xmerl DEPS = lager jsx ranch recon credentials_obfuscation -dep_credentials_obfuscation = hex 1.1.0 +dep_credentials_obfuscation = hex 2.0.0 # FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be # reviewed and merged. diff --git a/deps/rabbit_common/codegen.py b/deps/rabbit_common/codegen.py index e8ac6f8dbf9e8072a75be1d0fa74de74b836b143..ac12b883b3aff0e642983777944dcf0a57140fb4 100755 --- a/deps/rabbit_common/codegen.py +++ b/deps/rabbit_common/codegen.py @@ -13,7 +13,7 @@ ## The Original Code is RabbitMQ. ## ## The Initial Developer of the Original Code is Pivotal Software, Inc. -## Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. ## from __future__ import nested_scopes @@ -113,7 +113,7 @@ def printFileHeader(): %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %%""") def genErl(spec): diff --git a/deps/rabbit_common/erlang.mk b/deps/rabbit_common/erlang.mk index 349a5fe8b45dd557af123ba2e6534fe118213936..54eb8f1a818df34e83266121f0286f89f9ee4d3d 100644 --- a/deps/rabbit_common/erlang.mk +++ b/deps/rabbit_common/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/proper # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6832,6 +6903,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6878,6 +6950,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7535,3 +7608,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbit_common/include/rabbit.hrl b/deps/rabbit_common/include/rabbit.hrl index 20d11f44a6b68cede59eca6c8dae4edd55bca0e2..a221d49cc621d40145bb9f94a435440c2bd53ba5 100644 --- a/deps/rabbit_common/include/rabbit.hrl +++ b/deps/rabbit_common/include/rabbit.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -include("resource.hrl"). @@ -152,7 +152,7 @@ version, %% string() description, %% string() type, %% 'ez' or 'dir' - dependencies, %% [{atom(), string()}] + dependencies, %% [atom()] location, %% string() %% List of supported broker version ranges, %% e.g. ["3.5.7", "3.6.1"] @@ -193,10 +193,8 @@ %%---------------------------------------------------------------------------- --define(COPYRIGHT_MESSAGE, "Copyright (c) 2007-2020 Pivotal Software, Inc."). +-define(COPYRIGHT_MESSAGE, "Copyright (c) 2007-2020 VMware, Inc. or its affiliates."). -define(INFORMATION_MESSAGE, "Licensed under the MPL 1.1. Website: https://rabbitmq.com"). --define(OTP_MINIMUM, "21.3"). --define(ERTS_MINIMUM, "10.3"). %% EMPTY_FRAME_SIZE, 8 = 1 + 2 + 4 + 1 %% - 1 byte of frame type diff --git a/deps/rabbit_common/include/rabbit_core_metrics.hrl b/deps/rabbit_common/include/rabbit_core_metrics.hrl index 977d64ef54e3f51f7e961a2378a4833ebb25225d..4201accaf5dc6a47d46b0bb5532d37ce2f85b829 100644 --- a/deps/rabbit_common/include/rabbit_core_metrics.hrl +++ b/deps/rabbit_common/include/rabbit_core_metrics.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% These tables contain the raw metrics as stored by RabbitMQ core diff --git a/deps/rabbit_common/include/rabbit_memory.hrl b/deps/rabbit_common/include/rabbit_memory.hrl index f16295d01bda5a6224106b3f7b7f8415999b1057..5a75ca0dfdaa5ca943fee63ec056811d59432ec1 100644 --- a/deps/rabbit_common/include/rabbit_memory.hrl +++ b/deps/rabbit_common/include/rabbit_memory.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -define(DEFAULT_MEMORY_CHECK_INTERVAL, 1000). diff --git a/deps/rabbit_common/include/rabbit_misc.hrl b/deps/rabbit_common/include/rabbit_misc.hrl index 1a462c6fcbd84fbaa9141b922ba29b919eb3274c..f929167782483b0ef61d8fb7d49b0050f806aeec 100644 --- a/deps/rabbit_common/include/rabbit_misc.hrl +++ b/deps/rabbit_common/include/rabbit_misc.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -define(RPC_TIMEOUT, infinity). diff --git a/deps/rabbit_common/include/rabbit_msg_store.hrl b/deps/rabbit_common/include/rabbit_msg_store.hrl index 2dc41577479684b4859e14b0d16056096a36c469..56c8086ce4e00bc7fd830a1c6593c12a6b041fa2 100644 --- a/deps/rabbit_common/include/rabbit_msg_store.hrl +++ b/deps/rabbit_common/include/rabbit_msg_store.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -include("rabbit.hrl"). diff --git a/deps/rabbit_common/include/resource.hrl b/deps/rabbit_common/include/resource.hrl index 0870c6cee6674a8260e731e7eaf82d09f3865e3d..8a20f416bf5287069fc54d6368ff3c39b55865d2 100644 --- a/deps/rabbit_common/include/resource.hrl +++ b/deps/rabbit_common/include/resource.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -record(resource, { diff --git a/deps/rabbit_common/mk/rabbitmq-build.mk b/deps/rabbit_common/mk/rabbitmq-build.mk index fc6e835e5b99845bd1f66aebfaeab1a3c8de85ec..eac99cc2d342484d06797e8873c901ae80537cea 100644 --- a/deps/rabbit_common/mk/rabbitmq-build.mk +++ b/deps/rabbit_common/mk/rabbitmq-build.mk @@ -10,27 +10,6 @@ endif # why ERL_LIBS may contain twice the path to Elixir libraries or # ERLC_OPTS may contain duplicated flags. -# Add Elixir libraries to ERL_LIBS for testsuites. -# -# We replace the leading drive letter ("C:/") with an MSYS2-like path -# ("/C/") for Windows. Otherwise, ERL_LIBS mixes `:` as a PATH separator -# and a drive letter marker. This causes the Erlang VM to crash with -# "Bad address". -# -# The space before `~r//` is apparently required. Otherwise, Elixir -# complains with "unexpected token "~"". - -ifeq ($(origin ELIXIR_LIB_DIR),undefined) -ELIXIR_LIB_DIR := $(shell elixir -e 'IO.puts(Regex.replace( ~r/^([a-zA-Z]):/, to_string(:code.lib_dir(:elixir)), "/\\1"))') -export ELIXIR_LIB_DIR -endif - -ifeq ($(ERL_LIBS),) -ERL_LIBS := $(ELIXIR_LIB_DIR) -else -ERL_LIBS := $(ERL_LIBS):$(ELIXIR_LIB_DIR) -endif - TEST_ERLC_OPTS += +nowarn_export_all ifneq ($(PROJECT),rabbit_common) @@ -43,11 +22,13 @@ endif LAGER_EXTRA_SINKS += rabbit_log \ rabbit_log_channel \ rabbit_log_connection \ + rabbit_log_feature_flags \ + rabbit_log_federation \ rabbit_log_ldap \ rabbit_log_mirroring \ + rabbit_log_prelaunch \ rabbit_log_queue \ rabbit_log_ra \ - rabbit_log_federation \ rabbit_log_shovel \ rabbit_log_upgrade lager_extra_sinks = $(subst $(space),$(comma),$(LAGER_EXTRA_SINKS)) diff --git a/deps/rabbit_common/mk/rabbitmq-components.mk b/deps/rabbit_common/mk/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbit_common/mk/rabbitmq-components.mk +++ b/deps/rabbit_common/mk/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbit_common/mk/rabbitmq-dist.mk b/deps/rabbit_common/mk/rabbitmq-dist.mk index af1e05a16796f25da9dfaa7f92931c50f211e6ce..172baabdb07f60bcc226227b802ca04040f927be 100644 --- a/deps/rabbit_common/mk/rabbitmq-dist.mk +++ b/deps/rabbit_common/mk/rabbitmq-dist.mk @@ -1,8 +1,16 @@ -.PHONY: dist test-dist do-dist clean-dist +.PHONY: dist test-dist do-dist cli-scripts cli-escripts clean-dist DIST_DIR = plugins +CLI_SCRIPTS_DIR = sbin +CLI_ESCRIPTS_DIR = escript MIX = echo y | mix +ifeq ($(USE_RABBIT_BOOT_SCRIPT),) +DIST_AS_EZS ?= true +else +DIST_AS_EZS ?= +endif + dist_verbose_0 = @echo " DIST " $@; dist_verbose_2 = set -x; dist_verbose = $(dist_verbose_$(V)) @@ -48,7 +56,11 @@ endef define do_ez_target_erlangmk dist_$(1)_ez_dir = $$(if $(2),$(DIST_DIR)/$(1)-$(2), \ $$(if $$(VERSION),$(DIST_DIR)/$(1)-$$(VERSION),$(DIST_DIR)/$(1))) +ifeq ($(DIST_AS_EZS),) +dist_$(1)_ez = $$(dist_$(1)_ez_dir) +else dist_$(1)_ez = $$(dist_$(1)_ez_dir).ez +endif $$(dist_$(1)_ez): APP = $(1) $$(dist_$(1)_ez): VSN = $(2) @@ -56,7 +68,7 @@ $$(dist_$(1)_ez): SRC_DIR = $(3) $$(dist_$(1)_ez): EZ_DIR = $$(abspath $$(dist_$(1)_ez_dir)) $$(dist_$(1)_ez): EZ = $$(dist_$(1)_ez) $$(dist_$(1)_ez): $$(if $$(wildcard $(3)/ebin $(3)/include $(3)/priv),\ - $$(filter-out %/dep_built,$$(call core_find,$$(wildcard $(3)/ebin $(3)/include $(3)/priv),*)),) + $$(filter-out %/dep_built %/ebin/test,$$(call core_find,$$(wildcard $(3)/ebin $(3)/include $(3)/priv),*)),) # If the application's Makefile defines a `list-dist-deps` target, we # use it to populate the dependencies list. This is useful when the @@ -138,7 +150,7 @@ $(error DIST_PLUGINS_LIST ($(DIST_PLUGINS_LIST)) is missing) endif $(eval $(foreach path, \ - $(filter-out %/rabbit %/looking_glass %/lz4, \ + $(filter-out %/looking_glass %/lz4, \ $(sort $(shell cat $(DIST_PLUGINS_LIST))) $(CURDIR)), \ $(call ez_target,$(if $(filter $(path),$(CURDIR)),$(PROJECT),$(notdir $(path))),$(path)))) endif @@ -163,6 +175,7 @@ $(ERLANGMK_DIST_EZS): $(verbose) rm -rf $(EZ_DIR) $(EZ) $(verbose) mkdir -p $(EZ_DIR) $(dist_verbose) $(RSYNC) -a $(RSYNC_V) \ + --exclude '/ebin/test' \ --include '/ebin/***' \ --include '/include/***' \ --include '/priv/***' \ @@ -174,12 +187,14 @@ $(ERLANGMK_DIST_EZS): && grep -q '^prepare-dist::' $(SRC_DIR)/Makefile) || \ $(MAKE) --no-print-directory -C $(SRC_DIR) prepare-dist \ APP=$(APP) VSN=$(VSN) EZ_DIR=$(EZ_DIR) +ifneq ($(DIST_AS_EZS),) $(verbose) (cd $(DIST_DIR) && \ find "$(basename $(notdir $@))" | LC_COLLATE=C sort \ > "$(basename $(notdir $@)).manifest" && \ $(ZIP) $(ZIP_V) --names-stdin "$(notdir $@)" \ < "$(basename $(notdir $@)).manifest") $(verbose) rm -rf $(EZ_DIR) $(EZ_DIR).manifest +endif $(MIX_DIST_EZS): $(mix_task_archive_deps) $(verbose) cd $(SRC_DIR) && \ @@ -196,23 +211,152 @@ $(mix_task_archive_deps): MAYBE_APPS_LIST = $(if $(shell test -f $(ERLANG_MK_TMP)/apps.log && echo OK), \ $(ERLANG_MK_TMP)/apps.log) +DIST_LOCK = $(DIST_DIR).lock dist:: $(ERLANG_MK_RECURSIVE_DEPS_LIST) all - $(gen_verbose) $(MAKE) do-dist \ - DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) $(MAYBE_APPS_LIST)" - + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + elif command -v lockf >/dev/null; then \ + lockf $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + else \ + $(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"; \ + fi + +test-dist:: export TEST_DIR=NON-EXISTENT test-dist:: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) test-build - $(gen_verbose) $(MAKE) do-dist \ - DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) $(MAYBE_APPS_LIST)" + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + elif command -v lockf >/dev/null; then \ + lockf $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + else \ + $(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"; \ + fi DIST_EZS = $(ERLANGMK_DIST_EZS) $(MIX_DIST_EZS) do-dist:: $(DIST_EZS) $(verbose) unwanted='$(filter-out $(DIST_EZS) $(EXTRA_DIST_EZS), \ - $(wildcard $(DIST_DIR)/*.ez))'; \ - test -z "$$unwanted" || (echo " RM $$unwanted" && rm -f $$unwanted) + $(wildcard $(DIST_DIR)/*))'; \ + test -z "$$unwanted" || (echo " RM $$unwanted" && rm -rf $$unwanted) + +CLI_SCRIPTS_LOCK = $(CLI_SCRIPTS_DIR).lock +CLI_ESCRIPTS_LOCK = $(CLI_ESCRIPTS_DIR).lock + +ifneq ($(filter-out rabbit_common amqp10_common,$(PROJECT)),) +dist:: install-cli +test-build:: install-cli +endif + +install-cli: install-cli-scripts install-cli-escripts + @: + +ifeq ($(PROJECT),rabbit) +install-cli-scripts: + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(CLI_SCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_SCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + else \ + mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done; \ + fi +else + +install-cli-scripts: + $(gen_verbose) \ + set -e; \ + if test -d "$(DEPS_DIR)/rabbit/scripts"; then \ + rabbit_scripts_dir='$(DEPS_DIR)/rabbit/scripts'; \ + elif test -d "$(DEPS_DIR)/../scripts"; then \ + rabbit_scripts_dir='$(DEPS_DIR)/../scripts'; \ + else \ + echo 'rabbit/scripts directory not found' 1>&2; \ + exit 1; \ + fi; \ + test -d "$$rabbit_scripts_dir"; \ + if command -v flock >/dev/null; then \ + flock $(CLI_SCRIPTS_LOCK) \ + sh -e -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "'$$rabbit_scripts_dir'"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_SCRIPTS_LOCK) \ + sh -e -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "'$$rabbit_scripts_dir'"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + else \ + mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "$$rabbit_scripts_dir"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done; \ + fi +endif + +install-cli-escripts: + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(CLI_ESCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR='; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_ESCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR='; \ + else \ + mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR= ; \ + fi clean-dist:: - $(gen_verbose) rm -rf $(DIST_DIR) + $(gen_verbose) rm -rf \ + "$(DIST_DIR)" \ + "$(CLI_SCRIPTS_DIR)" \ + "$(CLI_ESCRIPTS_DIR)" clean:: clean-dist diff --git a/deps/rabbit_common/mk/rabbitmq-run.mk b/deps/rabbit_common/mk/rabbitmq-run.mk index 216e73b761160e655467d7a45652455a9aaaacd6..b2b9bd6332bd741735ef47ff7bf261f034d14634 100644 --- a/deps/rabbit_common/mk/rabbitmq-run.mk +++ b/deps/rabbit_common/mk/rabbitmq-run.mk @@ -19,12 +19,7 @@ TEST_TMPDIR ?= $(TMPDIR)/rabbitmq-test-instances endif # Location of the scripts controlling the broker. -ifeq ($(PROJECT),rabbit) -RABBITMQ_BROKER_DIR ?= $(CURDIR) -else -RABBITMQ_BROKER_DIR ?= $(DEPS_DIR)/rabbit -endif -RABBITMQ_SCRIPTS_DIR ?= $(RABBITMQ_BROKER_DIR)/scripts +RABBITMQ_SCRIPTS_DIR ?= $(CURDIR)/sbin ifeq ($(PLATFORM),msys2) RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins.bat @@ -65,14 +60,18 @@ node_log_base = $(call node_tmpdir,$(1))/log node_mnesia_base = $(call node_tmpdir,$(1))/mnesia node_mnesia_dir = $(call node_mnesia_base,$(1))/$(1) node_quorum_dir = $(call node_mnesia_dir,$(1))/quorum -node_schema_dir = $(call node_tmpdir,$(1))/schema node_plugins_expand_dir = $(call node_tmpdir,$(1))/plugins -node_generated_config_dir = $(call node_tmpdir,$(1))/config node_feature_flags_file = $(call node_tmpdir,$(1))/feature_flags node_enabled_plugins_file = $(call node_tmpdir,$(1))/enabled_plugins # Broker startup variables for the test environment. -RABBITMQ_NODENAME ?= rabbit +ifeq ($(PLATFORM),msys2) +HOSTNAME := $(COMPUTERNAME) +else +HOSTNAME := $(shell hostname -s) +endif + +RABBITMQ_NODENAME ?= rabbit@$(HOSTNAME) RABBITMQ_NODENAME_FOR_PATHS ?= $(RABBITMQ_NODENAME) NODE_TMPDIR ?= $(call node_tmpdir,$(RABBITMQ_NODENAME_FOR_PATHS)) @@ -82,12 +81,15 @@ RABBITMQ_LOG_BASE ?= $(call node_log_base,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_MNESIA_BASE ?= $(call node_mnesia_base,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_MNESIA_DIR ?= $(call node_mnesia_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_QUORUM_DIR ?= $(call node_quorum_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) -RABBITMQ_SCHEMA_DIR ?= $(call node_schema_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_PLUGINS_EXPAND_DIR ?= $(call node_plugins_expand_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) -RABBITMQ_GENERATED_CONFIG_DIR ?= $(call node_generated_config_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_FEATURE_FLAGS_FILE ?= $(call node_feature_flags_file,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_ENABLED_PLUGINS_FILE ?= $(call node_enabled_plugins_file,$(RABBITMQ_NODENAME_FOR_PATHS)) +# Enable colourful debug logging by default +# To change this, set RABBITMQ_LOG to info, notice, warning etc. +RABBITMQ_LOG ?= debug,+color +export RABBITMQ_LOG + # erlang.mk adds dependencies' ebin directory to ERL_LIBS. This is # a sane default, but we prefer to rely on the .ez archives in the # `plugins` directory so the plugin code is executed. The `plugins` @@ -112,12 +114,11 @@ RABBITMQ_LOG_BASE="$(call node_log_base,$(2))" \ RABBITMQ_MNESIA_BASE="$(call node_mnesia_base,$(2))" \ RABBITMQ_MNESIA_DIR="$(call node_mnesia_dir,$(2))" \ RABBITMQ_QUORUM_DIR="$(call node_quorum_dir,$(2))" \ -RABBITMQ_SCHEMA_DIR="$(call node_schema_dir,$(2))" \ -RABBITMQ_GENERATED_CONFIG_DIR="$(call node_generated_config_dir,$(2))" \ RABBITMQ_FEATURE_FLAGS_FILE="$(call node_feature_flags_file,$(2))" \ RABBITMQ_PLUGINS_DIR="$(if $(RABBITMQ_PLUGINS_DIR),$(RABBITMQ_PLUGINS_DIR),$(RMQ_PLUGINS_DIR))" \ RABBITMQ_PLUGINS_EXPAND_DIR="$(call node_plugins_expand_dir,$(2))" \ -RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" +RABBITMQ_SERVER_START_ARGS="-ra wal_sync_method sync $(RABBITMQ_SERVER_START_ARGS)" \ +RABBITMQ_ENABLED_PLUGINS="$(RABBITMQ_ENABLED_PLUGINS)" endef BASIC_SCRIPT_ENV_SETTINGS = \ @@ -134,60 +135,61 @@ virgin-test-tmpdir: node-tmpdir: $(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \ $(RABBITMQ_MNESIA_BASE) \ - $(RABBITMQ_SCHEMA_DIR) \ - $(RABBITMQ_PLUGINS_EXPAND_DIR) \ - $(RABBITMQ_GENERATED_CONFIG_DIR) + $(RABBITMQ_PLUGINS_EXPAND_DIR) virgin-node-tmpdir: $(gen_verbose) rm -rf $(NODE_TMPDIR) $(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \ $(RABBITMQ_MNESIA_BASE) \ - $(RABBITMQ_SCHEMA_DIR) \ - $(RABBITMQ_PLUGINS_EXPAND_DIR) \ - $(RABBITMQ_GENERATED_CONFIG_DIR) + $(RABBITMQ_PLUGINS_EXPAND_DIR) .PHONY: test-tmpdir virgin-test-tmpdir node-tmpdir virgin-node-tmpdir -ifeq ($(wildcard ebin/test),) -$(RABBITMQ_ENABLED_PLUGINS_FILE): dist -endif - ifdef LEAVE_PLUGINS_DISABLED -$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir - $(gen_verbose) : >$@ +RABBITMQ_ENABLED_PLUGINS ?= else -$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir - $(verbose) rm -f $@ - $(gen_verbose) $(BASIC_SCRIPT_ENV_SETTINGS) \ - $(RABBITMQ_PLUGINS) enable --all --offline +RABBITMQ_ENABLED_PLUGINS ?= ALL endif # -------------------------------------------------------------------- # Run a full RabbitMQ. # -------------------------------------------------------------------- -COMMA = , - define test_rabbitmq_config %% vim:ft=erlang: [ {rabbit, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(RABBITMQ_NODE_PORT)]}$(COMMA),) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(RABBITMQ_NODE_PORT)]}$(comma),) {loopback_users, []}, - {log, [{file, [{level, debug}]}]} + {log, [{file, [{level, debug}]}, + {console, [{level, debug}]}]} ]}, {rabbitmq_management, [ -$(if $(RABBITMQ_NODE_PORT), {listener$(COMMA) [{port$(COMMA) $(shell echo "$$(($(RABBITMQ_NODE_PORT) + 10000))")}]},) +$(if $(RABBITMQ_NODE_PORT), {listener$(comma) [{port$(comma) $(shell echo "$$(($(RABBITMQ_NODE_PORT) + 10000))")}]},) ]}, {rabbitmq_mqtt, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(shell echo "$$((1883 + $(RABBITMQ_NODE_PORT) - 5672))")]},) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(shell echo "$$((1883 + $(RABBITMQ_NODE_PORT) - 5672))")]},) ]}, {rabbitmq_stomp, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(shell echo "$$((61613 + $(RABBITMQ_NODE_PORT) - 5672))")]},) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(shell echo "$$((61613 + $(RABBITMQ_NODE_PORT) - 5672))")]},) ]}, {ra, [ - {data_dir, "$(RABBITMQ_QUORUM_DIR)"} + {data_dir, "$(RABBITMQ_QUORUM_DIR)"}, + {wal_sync_method, sync} + ]}, + {lager, [ + {colors, [ + %% https://misc.flogisoft.com/bash/tip_colors_and_formatting + {debug, "\\\e[0;34m" }, + {info, "\\\e[1;37m" }, + {notice, "\\\e[1;36m" }, + {warning, "\\\e[1;33m" }, + {error, "\\\e[1;31m" }, + {critical, "\\\e[1;35m" }, + {alert, "\\\e[1;44m" }, + {emergency, "\\\e[1;41m" } + ]} ]} ]. endef @@ -198,7 +200,8 @@ define test_rabbitmq_config_with_tls [ {rabbit, [ {loopback_users, []}, - {log, [{file, [{level, debug}]}]}, + {log, [{file, [{level, debug}]}, + {console, [{level, debug}]}]}, {ssl_listeners, [5671]}, {ssl_options, [ {cacertfile, "$(TEST_TLS_CERTS_DIR_in_config)/testca/cacert.pem"}, @@ -222,7 +225,21 @@ define test_rabbitmq_config_with_tls ]} ]}, {ra, [ - {data_dir, "$(RABBITMQ_QUORUM_DIR)"} + {data_dir, "$(RABBITMQ_QUORUM_DIR)"}, + {wal_sync_method, sync} + ]}, + {lager, [ + {colors, [ + %% https://misc.flogisoft.com/bash/tip_colors_and_formatting + {debug, "\\\e[0;34m" }, + {info, "\\\e[1;37m" }, + {notice, "\\\e[1;36m" }, + {warning, "\\\e[1;33m" }, + {error, "\\\e[1;31m" }, + {critical, "\\\e[1;35m" }, + {alert, "\\\e[1;44m" }, + {emergency, "\\\e[1;41m" } + ]} ]} ]. endef @@ -249,19 +266,28 @@ $(TEST_TLS_CERTS_DIR): node-tmpdir show-test-tls-certs-dir: $(TEST_TLS_CERTS_DIR) @echo $(TEST_TLS_CERTS_DIR) -run-broker run-tls-broker: RABBITMQ_CONFIG_FILE ?= $(basename $(TEST_CONFIG_FILE)) +ifdef NOBUILD +DIST_TARGET ?= +else +ifeq ($(wildcard ebin/test),) +DIST_TARGET ?= dist +else +DIST_TARGET ?= test-dist +endif +endif + +run-broker run-tls-broker: RABBITMQ_CONFIG_FILE := $(basename $(TEST_CONFIG_FILE)) run-broker: config := $(test_rabbitmq_config) run-tls-broker: config := $(test_rabbitmq_config_with_tls) run-tls-broker: $(TEST_TLS_CERTS_DIR) -run-broker run-tls-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) \ - $(TEST_CONFIG_FILE) +run-broker run-tls-broker: node-tmpdir $(DIST_TARGET) $(TEST_CONFIG_FILE) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_ALLOW_INPUT=true \ RABBITMQ_CONFIG_FILE=$(RABBITMQ_CONFIG_FILE) \ $(RABBITMQ_SERVER) -run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-background-broker: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ $(RABBITMQ_SERVER) -detached @@ -269,13 +295,13 @@ run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) # Run a bare Erlang node. # -------------------------------------------------------------------- -run-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-node: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ RABBITMQ_ALLOW_INPUT=true \ $(RABBITMQ_SERVER) -run-background-node: virgin-node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-background-node: virgin-node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ $(RABBITMQ_SERVER) -detached @@ -291,7 +317,12 @@ endif RMQCTL_WAIT_TIMEOUT ?= 60 -start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +define rmq_started +true = rpc:call('$(1)', rabbit, is_running, []), +halt(). +endef + +start-background-node: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ $(RABBITMQ_SERVER) \ @@ -299,14 +330,14 @@ start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) ERL_LIBS="$(DIST_ERL_LIBS)" \ $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait --timeout $(RMQCTL_WAIT_TIMEOUT) $(RABBITMQ_PID_FILE) kernel -start-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +start-background-broker: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ $(RABBITMQ_SERVER) \ $(REDIRECT_STDIO) & ERL_LIBS="$(DIST_ERL_LIBS)" \ $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait --timeout $(RMQCTL_WAIT_TIMEOUT) $(RABBITMQ_PID_FILE) && \ ERL_LIBS="$(DIST_ERL_LIBS)" \ - $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) status >/dev/null + $(call erlang,$(call rmq_started,$(RABBITMQ_NODENAME)),-sname sbb-$$$$ -hidden) start-rabbit-on-node: $(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \ @@ -324,9 +355,10 @@ stop-rabbit-on-node: stop-node: $(exec_verbose) ( \ - pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)) && \ - ERL_LIBS="$(DIST_ERL_LIBS)" \ - $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) stop && \ + pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)); \ + test "$$pid" && \ + kill -TERM "$$pid" && \ + echo waiting for process to exit && \ while ps -p "$$pid" >/dev/null 2>&1; do sleep 1; done \ ) || : @@ -338,15 +370,18 @@ stop-node: NODES ?= 2 -start-brokers start-cluster: +start-brokers start-cluster: $(DIST_TARGET) @for n in $$(seq $(NODES)); do \ - nodename="rabbit-$$n@$$(hostname -s)"; \ + nodename="rabbit-$$n@$(HOSTNAME)"; \ $(MAKE) start-background-broker \ + NOBUILD=1 \ RABBITMQ_NODENAME="$$nodename" \ RABBITMQ_NODE_PORT="$$((5672 + $$n - 1))" \ RABBITMQ_SERVER_START_ARGS=" \ -rabbit loopback_users [] \ -rabbitmq_management listener [{port,$$((15672 + $$n - 1))}] \ + -rabbitmq_mqtt tcp_listeners [$$((1883 + $$n - 1))] \ + -rabbitmq_stomp tcp_listeners [$$((61613 + $$n - 1))] \ -rabbitmq_prometheus tcp_config [{port,$$((15692 + $$n - 1))}] \ "; \ if test '$@' = 'start-cluster' && test "$$nodename1"; then \ @@ -363,7 +398,7 @@ start-brokers start-cluster: stop-brokers stop-cluster: @for n in $$(seq $(NODES) -1 1); do \ - nodename="rabbit-$$n@$$(hostname -s)"; \ + nodename="rabbit-$$n@$(HOSTNAME)"; \ $(MAKE) stop-node \ RABBITMQ_NODENAME="$$nodename"; \ done diff --git a/deps/rabbit_common/mk/rabbitmq-tools.mk b/deps/rabbit_common/mk/rabbitmq-tools.mk index cde93c590efaa3b57ef33548c347bd0563e94741..6672153cb0fdebabc8b4defc1d42b62b15ccfaa9 100644 --- a/deps/rabbit_common/mk/rabbitmq-tools.mk +++ b/deps/rabbit_common/mk/rabbitmq-tools.mk @@ -1,3 +1,9 @@ +ifeq ($(PLATFORM),msys2) +HOSTNAME := $(COMPUTERNAME) +else +HOSTNAME := $(shell hostname -s) +endif + READY_DEPS = $(foreach DEP,\ $(filter $(RABBITMQ_COMPONENTS),$(DEPS) $(BUILD_DEPS) $(TEST_DEPS)), \ $(if $(wildcard $(DEPS_DIR)/$(DEP)),$(DEP),)) @@ -338,3 +344,86 @@ commits-since-release-title: $(verbose) $(call show_commits_since_tag,$*) endif # ($(wildcard .git),) + +# -------------------------------------------------------------------- +# erlang.mk query-deps* formatting. +# -------------------------------------------------------------------- + +# We need to provide a repo mapping for deps resolved via git_rmq fetch method +query_repo_git_rmq = https://github.com/rabbitmq/$(call rmq_cmp_repo_name,$(1)) + +# -------------------------------------------------------------------- +# Common test logs compression. +# -------------------------------------------------------------------- + +.PHONY: ct-logs-archive clean-ct-logs-archive + +ifneq ($(wildcard logs/*),) +TAR := tar +ifeq ($(PLATFORM),freebsd) +TAR := gtar +endif +ifeq ($(PLATFORM),darwin) +TAR := gtar +endif + +CT_LOGS_ARCHIVE ?= $(PROJECT)-ct-logs-$(subst _,-,$(subst -,,$(subst .,,$(patsubst ct_run.ct_$(PROJECT)@$(HOSTNAME).%,%,$(notdir $(lastword $(wildcard logs/ct_run.*))))))).tar.xz + +ifeq ($(patsubst %.tar.xz,%,$(CT_LOGS_ARCHIVE)),$(CT_LOGS_ARCHIVE)) +$(error CT_LOGS_ARCHIVE file must use '.tar.xz' as its filename extension) +endif + +ct-logs-archive: $(CT_LOGS_ARCHIVE) + @: + +$(CT_LOGS_ARCHIVE): + $(gen_verbose) \ + for file in logs/*; do \ + ! test -L "$$file" || rm "$$file"; \ + done + $(verbose) \ + $(TAR) -c \ + --exclude "*/mnesia" \ + --transform "s/^logs/$(patsubst %.tar.xz,%,$(notdir $(CT_LOGS_ARCHIVE)))/" \ + -f - logs | \ + xz > "$@" +else +ct-logs-archive: + @: +endif + +clean-ct-logs-archive:: + $(gen_verbose) rm -f $(PROJECT)-ct-logs-*.tar.xz + +clean:: clean-ct-logs-archive + +# -------------------------------------------------------------------- +# Generate a file listing RabbitMQ component dependencies and their +# Git commit hash. +# -------------------------------------------------------------------- + +.PHONY: rabbitmq-deps.mk clean-rabbitmq-deps.mk + +rabbitmq-deps.mk: $(PROJECT)-rabbitmq-deps.mk + @: + +closing_paren := ) + +define rmq_deps_mk_line +dep_$(1) := git $(dir $(RABBITMQ_UPSTREAM_FETCH_URL))$(call rmq_cmp_repo_name,$(1)).git $$(git -C "$(2)" rev-parse HEAD) +endef + +$(PROJECT)-rabbitmq-deps.mk: $(ERLANG_MK_RECURSIVE_DEPS_LIST) + $(gen_verbose) echo "# In $(PROJECT) - commit $$(git rev-parse HEAD)" > $@ + $(verbose) cat $(ERLANG_MK_RECURSIVE_DEPS_LIST) | \ + while read -r dir; do \ + component=$$(basename "$$dir"); \ + case "$$component" in \ + $(foreach component,$(RABBITMQ_COMPONENTS),$(component)$(closing_paren) echo "$(call rmq_deps_mk_line,$(component),$$dir)" ;;) \ + esac; \ + done >> $@ + +clean:: clean-rabbitmq-deps.mk + +clean-rabbitmq-deps.mk: + $(gen_verbose) rm -f $(PROJECT)-rabbitmq-deps.mk diff --git a/deps/rabbit_common/src/app_utils.erl b/deps/rabbit_common/src/app_utils.erl index d2906142a4fd3e61f1f860f11ec5e2f4fc9e6af8..90617d91026c681ca3112ee7f376b841e8edca6e 100644 --- a/deps/rabbit_common/src/app_utils.erl +++ b/deps/rabbit_common/src/app_utils.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(app_utils). diff --git a/deps/rabbit_common/src/code_version.erl b/deps/rabbit_common/src/code_version.erl index 3881271568f0d5f8790308245c45dac7571a317b..bdab790ac408193497673b089e342fab5a211a00 100644 --- a/deps/rabbit_common/src/code_version.erl +++ b/deps/rabbit_common/src/code_version.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(code_version). diff --git a/deps/rabbit_common/src/credit_flow.erl b/deps/rabbit_common/src/credit_flow.erl index 977144e8aaa4637a96ced6aecbf1f7b44c171ba1..7d08d9afe48894bbdca9ccfb0488fb1b7be03094 100644 --- a/deps/rabbit_common/src/credit_flow.erl +++ b/deps/rabbit_common/src/credit_flow.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(credit_flow). diff --git a/deps/rabbit_common/src/delegate.erl b/deps/rabbit_common/src/delegate.erl index 0e67ba523705c2d3b4c9eeec021a743a0ff6fdcb..baa5a4357ec53e24ca31f13d597c66b22701294b 100644 --- a/deps/rabbit_common/src/delegate.erl +++ b/deps/rabbit_common/src/delegate.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(delegate). diff --git a/deps/rabbit_common/src/delegate_sup.erl b/deps/rabbit_common/src/delegate_sup.erl index fbe24994a51e3c52eb4fbbc8f651326a45853fe2..1b8296c3e9f7eb3f86e6bca0efcc99d77ecc8ac5 100644 --- a/deps/rabbit_common/src/delegate_sup.erl +++ b/deps/rabbit_common/src/delegate_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(delegate_sup). diff --git a/deps/rabbit_common/src/file_handle_cache.erl b/deps/rabbit_common/src/file_handle_cache.erl index 2f5e601608c81d1b45c78ae22b527a1afbccc1b8..d99ffaef05501d476fa19881e2d016b73ceb591f 100644 --- a/deps/rabbit_common/src/file_handle_cache.erl +++ b/deps/rabbit_common/src/file_handle_cache.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(file_handle_cache). diff --git a/deps/rabbit_common/src/file_handle_cache_stats.erl b/deps/rabbit_common/src/file_handle_cache_stats.erl index 68c3d82d5feacb3137c3b53a66f023f802ba07ff..2b49a8fa9525ef2bdfc7a21fd4d8ade7c5ec8b7a 100644 --- a/deps/rabbit_common/src/file_handle_cache_stats.erl +++ b/deps/rabbit_common/src/file_handle_cache_stats.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(file_handle_cache_stats). diff --git a/deps/rabbit_common/src/gen_server2.erl b/deps/rabbit_common/src/gen_server2.erl index 71cba54a5876533a9befbb03a6bf36b806c106e5..b80e921a892f2e0c6c4e014bab63b435adb7a9c5 100644 --- a/deps/rabbit_common/src/gen_server2.erl +++ b/deps/rabbit_common/src/gen_server2.erl @@ -93,7 +93,7 @@ %% %% 11) Internal buffer length is emitted as a core [RabbitMQ] metric. -%% All modifications are (C) 2009-2017 Pivotal Software, Inc. +%% All modifications are (C) 2009-2020 VMware, Inc. or its affiliates. %% ``The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in diff --git a/deps/rabbit_common/src/lager_forwarder_backend.erl b/deps/rabbit_common/src/lager_forwarder_backend.erl index 04393e35ca732f15cb3bd8697287bfda474c7cd8..1463960d81fa1b291a05171ee0af1227a3bcf6a5 100644 --- a/deps/rabbit_common/src/lager_forwarder_backend.erl +++ b/deps/rabbit_common/src/lager_forwarder_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(lager_forwarder_backend). diff --git a/deps/rabbit_common/src/mirrored_supervisor.erl b/deps/rabbit_common/src/mirrored_supervisor.erl index 7418cd907fc888f670202fb2ca54accbfdfbbb55..ea25d7bb62eb6d1372bce2fc9c15cfc007733259 100644 --- a/deps/rabbit_common/src/mirrored_supervisor.erl +++ b/deps/rabbit_common/src/mirrored_supervisor.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2011-2015 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2011-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(mirrored_supervisor). diff --git a/deps/rabbit_common/src/mnesia_sync.erl b/deps/rabbit_common/src/mnesia_sync.erl index 779a60bbe75964abd4be6fd36864ebd6aa49c39d..5b1f6e4afd3d3983f7e21772808f89b1cad26a95 100644 --- a/deps/rabbit_common/src/mnesia_sync.erl +++ b/deps/rabbit_common/src/mnesia_sync.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(mnesia_sync). diff --git a/deps/rabbit_common/src/pmon.erl b/deps/rabbit_common/src/pmon.erl index d96a8362d12493957f18f7898027d71a6e5d782d..7cd5cbc9ec6be9ea85245af817ee405c2923d584 100644 --- a/deps/rabbit_common/src/pmon.erl +++ b/deps/rabbit_common/src/pmon.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2011-2015 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2011-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(pmon). diff --git a/deps/rabbit_common/src/priority_queue.erl b/deps/rabbit_common/src/priority_queue.erl index c46a849dcb1ebff6f02bfd9f1944b65f4f0b25ac..9f4a458832721c42d4193a6c7842e4e9425c8420 100644 --- a/deps/rabbit_common/src/priority_queue.erl +++ b/deps/rabbit_common/src/priority_queue.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% Priority queues have essentially the same interface as ordinary diff --git a/deps/rabbit_common/src/rabbit_amqp_connection.erl b/deps/rabbit_common/src/rabbit_amqp_connection.erl index 53b1a1951c7d3c34c7ec3056f8d3f19c90bff80c..09ec87249a34dd46840ef1442fe08aa0f1fd0db0 100644 --- a/deps/rabbit_common/src/rabbit_amqp_connection.erl +++ b/deps/rabbit_common/src/rabbit_amqp_connection.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_amqp_connection). diff --git a/deps/rabbit_common/src/rabbit_amqqueue_common.erl b/deps/rabbit_common/src/rabbit_amqqueue_common.erl index 87acea47e91be7049ebc00fb04d791fc8fd5f9c4..7095c3c48c8aadec1182c78d3cfe967876a73050 100644 --- a/deps/rabbit_common/src/rabbit_amqqueue_common.erl +++ b/deps/rabbit_common/src/rabbit_amqqueue_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_amqqueue_common). diff --git a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl index 11d80e4257803f89f67d0363de503bbc925330fa..32c413f9ad848ff63b59478cc8ca9ca14dc464b8 100644 --- a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl +++ b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_auth_backend_dummy). diff --git a/deps/rabbit_common/src/rabbit_auth_mechanism.erl b/deps/rabbit_common/src/rabbit_auth_mechanism.erl index 53569be0105969f4817f92813baff6309aca1422..47ce94e582e13445c9b65826c808f62d9cb6b9a3 100644 --- a/deps/rabbit_common/src/rabbit_auth_mechanism.erl +++ b/deps/rabbit_common/src/rabbit_auth_mechanism.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_auth_mechanism). diff --git a/deps/rabbit_common/src/rabbit_authn_backend.erl b/deps/rabbit_common/src/rabbit_authn_backend.erl index 5fa8b8ba42018abbe93b2acbd53a71965f3b8fca..409303ce1e3505f95fa8fe4c208ccb629210aff7 100644 --- a/deps/rabbit_common/src/rabbit_authn_backend.erl +++ b/deps/rabbit_common/src/rabbit_authn_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_authn_backend). diff --git a/deps/rabbit_common/src/rabbit_authz_backend.erl b/deps/rabbit_common/src/rabbit_authz_backend.erl index a6c7e9d5f367a89cc7aa20e6904a6ef6c276d7c2..7a20fd8b93be7ef1cb28b12fc2987facf1ffe8f9 100644 --- a/deps/rabbit_common/src/rabbit_authz_backend.erl +++ b/deps/rabbit_common/src/rabbit_authz_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_authz_backend). diff --git a/deps/rabbit_common/src/rabbit_basic_common.erl b/deps/rabbit_common/src/rabbit_basic_common.erl index 98391ba58c83bd82a1b262c294a74028b4078695..725ee0a819bc710518eaf21a5d411f854dc169bd 100644 --- a/deps/rabbit_common/src/rabbit_basic_common.erl +++ b/deps/rabbit_common/src/rabbit_basic_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_basic_common). diff --git a/deps/rabbit_common/src/rabbit_binary_generator.erl b/deps/rabbit_common/src/rabbit_binary_generator.erl index 4ab235b0aff56418c58cc64b9b795b25113b6314..b1ad3cf7878e8be32662f29cd7506c5cf318db0c 100644 --- a/deps/rabbit_common/src/rabbit_binary_generator.erl +++ b/deps/rabbit_common/src/rabbit_binary_generator.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_binary_generator). diff --git a/deps/rabbit_common/src/rabbit_binary_parser.erl b/deps/rabbit_common/src/rabbit_binary_parser.erl index 4914a84284b5f97e95bb1290b0493fe2d1379872..d57eafe22ddff061f4ed419dbe2119c04a62113c 100644 --- a/deps/rabbit_common/src/rabbit_binary_parser.erl +++ b/deps/rabbit_common/src/rabbit_binary_parser.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_binary_parser). diff --git a/deps/rabbit_common/src/rabbit_cert_info.erl b/deps/rabbit_common/src/rabbit_cert_info.erl index 0d5c1f63d689a1a68d7a2af0d66cc01e44c673d3..af0c99dc9dc6e630b011948a5f1dd18085a36e01 100644 --- a/deps/rabbit_common/src/rabbit_cert_info.erl +++ b/deps/rabbit_common/src/rabbit_cert_info.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_cert_info). diff --git a/deps/rabbit_common/src/rabbit_channel_common.erl b/deps/rabbit_common/src/rabbit_channel_common.erl index d285502b4f4930a4ed2e4ae978c7fdfa18a99b2e..7f7f6e7366f42680733929051c2a625896fa224d 100644 --- a/deps/rabbit_common/src/rabbit_channel_common.erl +++ b/deps/rabbit_common/src/rabbit_channel_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_channel_common). diff --git a/deps/rabbit_common/src/rabbit_command_assembler.erl b/deps/rabbit_common/src/rabbit_command_assembler.erl index 55486bc5172b5606b2c075af6b5cd77c28b0558c..e80936347a7edc4d905b0bbe4c85cded3cc2ad53 100644 --- a/deps/rabbit_common/src/rabbit_command_assembler.erl +++ b/deps/rabbit_common/src/rabbit_command_assembler.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_command_assembler). diff --git a/deps/rabbit_common/src/rabbit_control_misc.erl b/deps/rabbit_common/src/rabbit_control_misc.erl index 7e071a413cc2b5d8275108d5c2d5845db8c95794..087b73057ed652af9d0dff7a01def72ab49f0d1b 100644 --- a/deps/rabbit_common/src/rabbit_control_misc.erl +++ b/deps/rabbit_common/src/rabbit_control_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_control_misc). diff --git a/deps/rabbit_common/src/rabbit_core_metrics.erl b/deps/rabbit_common/src/rabbit_core_metrics.erl index 1cec9ffd32cfbc00fbd401be83c73329af47eb8b..0ede8e1063aa5f55ff3f36b08fef39ba70407412 100644 --- a/deps/rabbit_common/src/rabbit_core_metrics.erl +++ b/deps/rabbit_common/src/rabbit_core_metrics.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_core_metrics). diff --git a/deps/rabbit_common/src/rabbit_data_coercion.erl b/deps/rabbit_common/src/rabbit_data_coercion.erl index f8bbec49a1ee96b38e3144ab3ccbdf04b83835db..1473dad09f9393de964ecc533bfb71f3fa596109 100644 --- a/deps/rabbit_common/src/rabbit_data_coercion.erl +++ b/deps/rabbit_common/src/rabbit_data_coercion.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_data_coercion). diff --git a/deps/rabbit_common/src/rabbit_env.erl b/deps/rabbit_common/src/rabbit_env.erl new file mode 100644 index 0000000000000000000000000000000000000000..07873f69f863f551e8a2a516157d59df9e1a080b --- /dev/null +++ b/deps/rabbit_common/src/rabbit_env.erl @@ -0,0 +1,1735 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_env). + +-include_lib("kernel/include/file.hrl"). + +-export([get_context/0, + get_context/1, + get_context_before_logging_init/0, + get_context_before_logging_init/1, + get_context_after_logging_init/1, + get_context_after_reloading_env/1, + dbg_config/0, + get_used_env_vars/0, + log_process_env/0, + log_context/1, + context_to_app_env_vars/1, + context_to_app_env_vars_no_logging/1, + context_to_code_path/1]). + +-ifdef(TEST). +-export([value_is_yes/1]). +-endif. + +-define(USED_ENV_VARS, + [ + "RABBITMQ_ALLOW_INPUT", + "RABBITMQ_ADVANCED_CONFIG_FILE", + "RABBITMQ_BASE", + "RABBITMQ_CONF_ENV_FILE", + "RABBITMQ_CONFIG_FILE", + "RABBITMQ_CONFIG_FILES", + "RABBITMQ_DBG", + "RABBITMQ_DIST_PORT", + "RABBITMQ_ENABLED_PLUGINS", + "RABBITMQ_ENABLED_PLUGINS_FILE", + "RABBITMQ_FEATURE_FLAGS", + "RABBITMQ_FEATURE_FLAGS_FILE", + "RABBITMQ_HOME", + "RABBITMQ_KEEP_PID_FILE_ON_EXIT", + "RABBITMQ_LOG", + "RABBITMQ_LOG_BASE", + "RABBITMQ_LOG_FF_REGISTRY", + "RABBITMQ_LOGS", + "RABBITMQ_MNESIA_BASE", + "RABBITMQ_MNESIA_DIR", + "RABBITMQ_MOTD_FILE", + "RABBITMQ_NODE_IP_ADDRESS", + "RABBITMQ_NODE_PORT", + "RABBITMQ_NODENAME", + "RABBITMQ_PID_FILE", + "RABBITMQ_PLUGINS_DIR", + "RABBITMQ_PLUGINS_EXPAND_DIR", + "RABBITMQ_PRODUCT_NAME", + "RABBITMQ_PRODUCT_VERSION", + "RABBITMQ_QUORUM_DIR", + "RABBITMQ_UPGRADE_LOG", + "RABBITMQ_USE_LONGNAME", + "SYS_PREFIX" + ]). + +get_context() -> + Context0 = get_context_before_logging_init(), + Context1 = get_context_after_logging_init(Context0), + get_context_after_reloading_env(Context1). + +get_context(TakeFromRemoteNode) -> + Context0 = get_context_before_logging_init(TakeFromRemoteNode), + Context1 = get_context_after_logging_init(Context0), + get_context_after_reloading_env(Context1). + +get_context_before_logging_init() -> + get_context_before_logging_init(false). + +get_context_before_logging_init(TakeFromRemoteNode) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun os_type/1, + fun log_levels/1, + fun interactive_shell/1, + fun output_supports_colors/1 + ], + + run_context_steps(context_base(TakeFromRemoteNode), Steps). + +get_context_after_logging_init(Context) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun sys_prefix/1, + fun rabbitmq_base/1, + fun data_dir/1, + fun rabbitmq_home/1, + fun config_base_dir/1, + fun load_conf_env_file/1, + fun log_levels/1 + ], + + run_context_steps(Context, Steps). + +get_context_after_reloading_env(Context) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun nodename_type/1, + fun nodename/1, + fun split_nodename/1, + fun maybe_setup_dist_for_remote_query/1, + fun dbg_config/1, + fun main_config_file/1, + fun additional_config_files/1, + fun advanced_config_file/1, + fun log_base_dir/1, + fun main_log_file/1, + fun upgrade_log_file/1, + fun mnesia_base_dir/1, + fun mnesia_dir/1, + fun quorum_queue_dir/1, + fun pid_file/1, + fun keep_pid_file_on_exit/1, + fun feature_flags_file/1, + fun forced_feature_flags_on_init/1, + fun log_feature_flags_registry/1, + fun plugins_path/1, + fun plugins_expand_dir/1, + fun enabled_plugins_file/1, + fun enabled_plugins/1, + fun maybe_stop_dist_for_remote_query/1, + fun amqp_ipaddr/1, + fun amqp_tcp_port/1, + fun erlang_dist_tcp_port/1, + fun product_name/1, + fun product_version/1, + fun motd_file/1 + ], + + run_context_steps(Context, Steps). + +context_base(TakeFromRemoteNode) -> + Context = #{}, + case TakeFromRemoteNode of + false -> + Context; + offline -> + update_context(Context, + from_remote_node, + offline); + _ when is_atom(TakeFromRemoteNode) -> + update_context(Context, + from_remote_node, + {TakeFromRemoteNode, 10000}); + {RemoteNode, infinity} + when is_atom(RemoteNode) -> + update_context(Context, + from_remote_node, + TakeFromRemoteNode); + {RemoteNode, Timeout} + when is_atom(RemoteNode) andalso + is_integer(Timeout) andalso + Timeout >= 0 -> + update_context(Context, + from_remote_node, + {TakeFromRemoteNode, Timeout}) + end. + +-ifdef(TEST). +os_type(Context) -> + {OSType, Origin} = + try + {persistent_term:get({?MODULE, os_type}), environment} + catch + _:badarg -> + {os:type(), default} + end, + update_context(Context, os_type, OSType, Origin). +-else. +os_type(Context) -> + update_context(Context, os_type, os:type(), default). +-endif. + +run_context_steps(Context, Steps) -> + lists:foldl( + fun(Step, Context1) -> Step(Context1) end, + Context, + Steps). + +update_context(Context, Key, Value) -> + Context#{Key => Value}. + +-define(origin_is_valid(O), + O =:= default orelse + O =:= environment orelse + O =:= remote_node). + +update_context(#{var_origins := Origins} = Context, Key, Value, Origin) + when ?origin_is_valid(Origin) -> + Context#{Key => Value, + var_origins => Origins#{Key => Origin}}; +update_context(Context, Key, Value, Origin) + when ?origin_is_valid(Origin) -> + Context#{Key => Value, + var_origins => #{Key => Origin}}. + +get_used_env_vars() -> + lists:filter( + fun({Var, _}) -> var_is_used(Var) end, + lists:sort(os:list_env_vars())). + +log_process_env() -> + rabbit_log_prelaunch:debug("Process environment:"), + lists:foreach( + fun({Var, Value}) -> + rabbit_log_prelaunch:debug(" - ~s = ~ts", [Var, Value]) + end, lists:sort(os:list_env_vars())). + +log_context(Context) -> + rabbit_log_prelaunch:debug("Context (based on environment variables):"), + lists:foreach( + fun(Key) -> + Value = maps:get(Key, Context), + rabbit_log_prelaunch:debug(" - ~s: ~p", [Key, Value]) + end, + lists:sort(maps:keys(Context))). + +context_to_app_env_vars(Context) -> + rabbit_log_prelaunch:debug( + "Setting default application environment variables:"), + Fun = fun({App, Param, Value}) -> + rabbit_log_prelaunch:debug( + " - ~s:~s = ~p", [App, Param, Value]), + ok = application:set_env( + App, Param, Value, [{persistent, true}]) + end, + context_to_app_env_vars1(Context, Fun). + +context_to_app_env_vars_no_logging(Context) -> + Fun = fun({App, Param, Value}) -> + ok = application:set_env( + App, Param, Value, [{persistent, true}]) + end, + context_to_app_env_vars1(Context, Fun). + +context_to_app_env_vars1( + #{mnesia_dir := MnesiaDir, + feature_flags_file := FFFile, + quorum_queue_dir := QuorumQueueDir, + plugins_path := PluginsPath, + plugins_expand_dir := PluginsExpandDir, + enabled_plugins_file := EnabledPluginsFile} = Context, + Fun) -> + lists:foreach( + Fun, + %% Those are all the application environment variables which + %% were historically set on the erl(1) command line in + %% rabbitmq-server(8). + [{kernel, inet_default_connect_options, [{nodelay, true}]}, + {sasl, errlog_type, error}, + {os_mon, start_cpu_sup, false}, + {os_mon, start_disksup, false}, + {os_mon, start_memsup, false}, + {mnesia, dir, MnesiaDir}, + {ra, data_dir, QuorumQueueDir}, + {rabbit, feature_flags_file, FFFile}, + {rabbit, plugins_dir, PluginsPath}, + {rabbit, plugins_expand_dir, PluginsExpandDir}, + {rabbit, enabled_plugins_file, EnabledPluginsFile}]), + + case Context of + #{erlang_dist_tcp_port := DistTcpPort} -> + lists:foreach( + Fun, + [{kernel, inet_dist_listen_min, DistTcpPort}, + {kernel, inet_dist_listen_max, DistTcpPort}]); + _ -> + ok + end, + case Context of + #{amqp_ipaddr := IpAddr, + amqp_tcp_port := TcpPort} + when IpAddr /= undefined andalso TcpPort /= undefined -> + Fun({rabbit, tcp_listeners, [{IpAddr, TcpPort}]}); + _ -> + ok + end, + ok. + +context_to_code_path(#{plugins_path := PluginsPath}) -> + Dirs = get_user_lib_dirs(PluginsPath), + code:add_pathsa(lists:reverse(Dirs)). + +%% ------------------------------------------------------------------- +%% Code copied from `kernel/src/code_server.erl`. +%% +%% The goal is to mimic the behavior of the `$ERL_LIBS` environment +%% variable. + +get_user_lib_dirs(Path) -> + Sep = case os:type() of + {win32, _} -> ";"; + _ -> ":" + end, + SplitPath = string:lexemes(Path, Sep), + get_user_lib_dirs_1(SplitPath). + +get_user_lib_dirs_1([Dir|DirList]) -> + case erl_prim_loader:list_dir(Dir) of + {ok, Dirs} -> + Paths = make_path(Dir, Dirs), + %% Only add paths trailing with ./ebin. + [P || P <- Paths, filename:basename(P) =:= "ebin"] ++ + get_user_lib_dirs_1(DirList); + error -> + get_user_lib_dirs_1(DirList) + end; +get_user_lib_dirs_1([]) -> []. + +%% +%% Create the initial path. +%% +make_path(BundleDir, Bundles0) -> + Bundles = choose_bundles(Bundles0), + make_path(BundleDir, Bundles, []). + +choose_bundles(Bundles) -> + ArchiveExt = archive_extension(), + Bs = lists:sort([create_bundle(B, ArchiveExt) || B <- Bundles]), + [FullName || {_Name,_NumVsn,FullName} <- + choose(lists:reverse(Bs), [], ArchiveExt)]. + +create_bundle(FullName, ArchiveExt) -> + BaseName = filename:basename(FullName, ArchiveExt), + case split_base(BaseName) of + {Name, VsnStr} -> + case vsn_to_num(VsnStr) of + {ok, VsnNum} -> + {Name,VsnNum,FullName}; + false -> + {FullName,[0],FullName} + end; + _ -> + {FullName,[0],FullName} + end. + +%% Convert "X.Y.Z. ..." to [K, L, M| ...] +vsn_to_num(Vsn) -> + case is_vsn(Vsn) of + true -> + {ok, [list_to_integer(S) || S <- string:lexemes(Vsn, ".")]}; + _ -> + false + end. + +is_vsn(Str) when is_list(Str) -> + Vsns = string:lexemes(Str, "."), + lists:all(fun is_numstr/1, Vsns). + +is_numstr(Cs) -> + lists:all(fun (C) when $0 =< C, C =< $9 -> true; + (_) -> false + end, Cs). + +choose([{Name,NumVsn,NewFullName}=New|Bs], Acc, ArchiveExt) -> + case lists:keyfind(Name, 1, Acc) of + {_, NV, OldFullName} when NV =:= NumVsn -> + case filename:extension(OldFullName) =:= ArchiveExt of + false -> + choose(Bs,Acc, ArchiveExt); + true -> + Acc2 = lists:keystore(Name, 1, Acc, New), + choose(Bs,Acc2, ArchiveExt) + end; + {_, _, _} -> + choose(Bs,Acc, ArchiveExt); + false -> + choose(Bs,[{Name,NumVsn,NewFullName}|Acc], ArchiveExt) + end; +choose([],Acc, _ArchiveExt) -> + Acc. + +make_path(_, [], Res) -> + Res; +make_path(BundleDir, [Bundle|Tail], Res) -> + Dir = filename:append(BundleDir, Bundle), + Ebin = filename:append(Dir, "ebin"), + %% First try with /ebin + case is_dir(Ebin) of + true -> + make_path(BundleDir, Tail, [Ebin|Res]); + false -> + %% Second try with archive + Ext = archive_extension(), + Base = filename:basename(Bundle, Ext), + Ebin2 = filename:join([BundleDir, Base ++ Ext, Base, "ebin"]), + Ebins = + case split_base(Base) of + {AppName,_} -> + Ebin3 = filename:join([BundleDir, Base ++ Ext, + AppName, "ebin"]), + [Ebin3, Ebin2, Dir]; + _ -> + [Ebin2, Dir] + end, + case try_ebin_dirs(Ebins) of + {ok,FoundEbin} -> + make_path(BundleDir, Tail, [FoundEbin|Res]); + error -> + make_path(BundleDir, Tail, Res) + end + end. + +try_ebin_dirs([Ebin|Ebins]) -> + case is_dir(Ebin) of + true -> {ok,Ebin}; + false -> try_ebin_dirs(Ebins) + end; +try_ebin_dirs([]) -> + error. + +split_base(BaseName) -> + case string:lexemes(BaseName, "-") of + [_, _|_] = Toks -> + Vsn = lists:last(Toks), + AllButLast = lists:droplast(Toks), + {string:join(AllButLast, "-"),Vsn}; + [_|_] -> + BaseName + end. + +is_dir(Path) -> + case erl_prim_loader:read_file_info(Path) of + {ok,#file_info{type=directory}} -> true; + _ -> false + end. + +archive_extension() -> + init:archive_extension(). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_NODENAME +%% Erlang node name. +%% Default: rabbit@ +%% +%% RABBITMQ_USE_LONGNAME +%% Flag indicating if long Erlang node names should be used instead +%% of short ones. +%% Default: unset (use short names) + +nodename_type(Context) -> + case get_prefixed_env_var("RABBITMQ_USE_LONGNAME") of + false -> + update_context(Context, nodename_type, shortnames, default); + Value -> + NameType = case value_is_yes(Value) of + true -> longnames; + false -> shortnames + end, + update_context(Context, nodename_type, NameType, environment) + end. + +nodename(#{nodename_type := NameType} = Context) -> + LongHostname = net_adm:localhost(), + ShortHostname = re:replace(LongHostname, "\\..*$", "", [{return, list}]), + case get_prefixed_env_var("RABBITMQ_NODENAME") of + false when NameType =:= shortnames -> + Nodename = rabbit_nodes_common:make({"rabbit", ShortHostname}), + update_context(Context, nodename, Nodename, default); + false when NameType =:= longnames -> + Nodename = rabbit_nodes_common:make({"rabbit", LongHostname}), + update_context(Context, nodename, Nodename, default); + Value -> + Nodename = case string:find(Value, "@") of + nomatch when NameType =:= shortnames -> + rabbit_nodes_common:make({Value, ShortHostname}); + nomatch when NameType =:= longnames -> + rabbit_nodes_common:make({Value, LongHostname}); + _ -> + rabbit_nodes_common:make(Value) + end, + update_context(Context, nodename, Nodename, environment) + end. + +split_nodename(#{nodename := Nodename} = Context) -> + update_context(Context, + split_nodename, rabbit_nodes_common:parts(Nodename)). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_CONFIG_FILE +%% Main configuration file. +%% Extension is optional. `.config` for the old erlang-term-based +%% format, `.conf` for the new Cuttlefish-based format. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/rabbitmq +%% (Windows) ${RABBITMQ_BASE}\rabbitmq +%% +%% RABBITMQ_CONFIG_FILES +%% Additional configuration files. +%% If a directory, all files directly inside it are loaded. +%% If a glob pattern, all matching file are loaded. +%% Only considered if the main configuration file is Cuttlefish-based. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/conf.d/*.conf +%% (Windows) ${RABBITMQ_BASE}\conf.d\*.conf +%% +%% RABBITMQ_ADVANCED_CONFIG_FILE +%% Advanced configuration file. +%% Erlang-term-based format with a `.config` extension. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/advanced.config +%% (Windows) ${RABBITMQ_BASE}\advanced.config + +config_base_dir(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + Dir = filename:join([SysPrefix, "etc", "rabbitmq"]), + update_context(Context, config_base_dir, Dir); +config_base_dir(#{os_type := {win32, _}, + rabbitmq_base := Dir} = Context) -> + update_context(Context, config_base_dir, Dir). + +main_config_file(Context) -> + case get_prefixed_env_var("RABBITMQ_CONFIG_FILE") of + false -> + File = get_default_main_config_file(Context), + update_context(Context, main_config_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, main_config_file, File, environment) + end. + +get_default_main_config_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "rabbitmq"). + +additional_config_files(Context) -> + case get_prefixed_env_var("RABBITMQ_CONFIG_FILES") of + false -> + Pattern = get_default_additional_config_files(Context), + update_context( + Context, additional_config_files, Pattern, default); + Value -> + Pattern = normalize_path(Value), + update_context( + Context, additional_config_files, Pattern, environment) + end. + +get_default_additional_config_files(#{config_base_dir := ConfigBaseDir}) -> + filename:join([ConfigBaseDir, "conf.d", "*.conf"]). + +advanced_config_file(Context) -> + case get_prefixed_env_var("RABBITMQ_ADVANCED_CONFIG_FILE") of + false -> + File = get_default_advanced_config_file(Context), + update_context(Context, advanced_config_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, advanced_config_file, File, environment) + end. + +get_default_advanced_config_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "advanced.config"). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_LOG_BASE +%% Directory to write log files +%% Default: (Unix) ${SYS_PREFIX}/var/log/rabbitmq +%% (Windows) ${RABBITMQ_BASE}\log +%% +%% RABBITMQ_LOGS +%% Main log file +%% Default: ${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log +%% +%% RABBITMQ_UPDATE_LOG +%% Upgrade-procesure-specific log file +%% Default: ${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log +%% +%% RABBITMQ_LOG +%% Log level; overrides the configuration file value +%% Default: (undefined) +%% +%% RABBITMQ_DBG +%% List of `module`, `module:function` or `module:function/arity` +%% to watch with dbg. +%% Default: (undefined) + +log_levels(Context) -> + case get_prefixed_env_var("RABBITMQ_LOG") of + false -> + update_context(Context, log_levels, undefined, default); + Value -> + LogLevels = parse_log_levels(string:lexemes(Value, ","), #{}), + update_context(Context, log_levels, LogLevels, environment) + end. + +parse_log_levels([CategoryValue | Rest], Result) -> + case string:lexemes(CategoryValue, "=") of + ["+color"] -> + Result1 = Result#{color => true}, + parse_log_levels(Rest, Result1); + ["-color"] -> + Result1 = Result#{color => false}, + parse_log_levels(Rest, Result1); + [CategoryOrLevel] -> + case parse_level(CategoryOrLevel) of + undefined -> + Result1 = Result#{CategoryOrLevel => info}, + parse_log_levels(Rest, Result1); + Level -> + Result1 = Result#{global => Level}, + parse_log_levels(Rest, Result1) + end; + [Category, Level0] -> + case parse_level(Level0) of + undefined -> + parse_log_levels(Rest, Result); + Level -> + Result1 = Result#{Category => Level}, + parse_log_levels(Rest, Result1) + end + end; +parse_log_levels([], Result) -> + Result. + +parse_level("debug") -> debug; +parse_level("info") -> info; +parse_level("notice") -> notice; +parse_level("warning") -> warning; +parse_level("error") -> error; +parse_level("critical") -> critical; +parse_level("alert") -> alert; +parse_level("emergency") -> emergency; +parse_level("none") -> none; +parse_level(_) -> undefined. + +log_base_dir(#{os_type := OSType} = Context) -> + case {get_prefixed_env_var("RABBITMQ_LOG_BASE"), OSType} of + {false, {unix, _}} -> + #{sys_prefix := SysPrefix} = Context, + Dir = filename:join([SysPrefix, "var", "log", "rabbitmq"]), + update_context(Context, log_base_dir, Dir, default); + {false, {win32, _}} -> + #{rabbitmq_base := RabbitmqBase} = Context, + Dir = filename:join([RabbitmqBase, "log"]), + update_context(Context, log_base_dir, Dir, default); + {Value, _} -> + Dir = normalize_path(Value), + update_context(Context, log_base_dir, Dir, environment) + end. + +main_log_file(#{nodename := Nodename, + log_base_dir := LogBaseDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_LOGS") of + false -> + File= filename:join(LogBaseDir, + atom_to_list(Nodename) ++ ".log"), + update_context(Context, main_log_file, File, default); + "-" -> + update_context(Context, main_log_file, "-", environment); + Value -> + File = normalize_path(Value), + update_context(Context, main_log_file, File, environment) + end. + +upgrade_log_file(#{nodename := Nodename, + log_base_dir := LogBaseDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_UPGRADE_LOG") of + false -> + File = filename:join(LogBaseDir, + atom_to_list(Nodename) ++ "_upgrade.log"), + update_context(Context, upgrade_log_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, upgrade_log_file, File, environment) + end. + +dbg_config() -> + {Mods, Output} = get_dbg_config(), + #{dbg_output => Output, + dbg_mods => Mods}. + +dbg_config(Context) -> + DbgContext = dbg_config(), + maps:merge(Context, DbgContext). + +get_dbg_config() -> + Output = stdout, + DbgValue = get_prefixed_env_var("RABBITMQ_DBG"), + case DbgValue of + false -> {[], Output}; + _ -> get_dbg_config1(string:lexemes(DbgValue, ","), [], Output) + end. + +get_dbg_config1(["=" ++ Filename | Rest], Mods, _) -> + get_dbg_config1(Rest, Mods, Filename); +get_dbg_config1([SpecValue | Rest], Mods, Output) -> + Pattern = "([^:]+)(?::([^/]+)(?:/([0-9]+))?)?", + Options = [{capture, all_but_first, list}], + Mods1 = case re:run(SpecValue, Pattern, Options) of + {match, [M, F, A]} -> + Entry = {list_to_atom(M), + list_to_atom(F), + list_to_integer(A)}, + [Entry | Mods]; + {match, [M, F]} -> + Entry = {list_to_atom(M), + list_to_atom(F), + '_'}, + [Entry | Mods]; + {match, [M]} -> + Entry = {list_to_atom(M), + '_', + '_'}, + [Entry | Mods]; + nomatch -> + Mods + end, + get_dbg_config1(Rest, Mods1, Output); +get_dbg_config1([], Mods, Output) -> + {lists:reverse(Mods), Output}. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_MNESIA_BASE +%% Directory where to create Mnesia directory. +%% Default: (Unix) ${SYS_PREFIX}/var/lib/rabbitmq/mnesia +%% (Windows) ${RABBITMQ_BASE}/db +%% +%% RABBITMQ_MNESIA_DIR +%% Directory where to put Mnesia data. +%% Default: (Unix) ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} +%% (Windows) ${RABBITMQ_MNESIA_BASE}\${RABBITMQ_NODENAME}-mnesia + +mnesia_base_dir(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_BASE") of + false when Remote =:= offline -> + update_context(Context, mnesia_base_dir, undefined, default); + false -> + mnesia_base_dir_from_node(Context); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_base_dir, Dir, environment) + end; +mnesia_base_dir(Context) -> + mnesia_base_dir_from_env(Context). + +mnesia_base_dir_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_BASE") of + false -> + Dir = get_default_mnesia_base_dir(Context), + update_context(Context, mnesia_base_dir, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_base_dir, Dir, environment) + end. + +mnesia_base_dir_from_node(Context) -> + %% This variable is used to compute other variables only, we + %% don't need to know what a remote node used initially. Only the + %% variables based on it are relevant. + update_context(Context, mnesia_base_dir, undefined, default). + +get_default_mnesia_base_dir(#{data_dir := DataDir} = Context) -> + Basename = case Context of + #{os_type := {unix, _}} -> "mnesia"; + #{os_type := {win32, _}} -> "db" + end, + filename:join(DataDir, Basename). + +mnesia_dir(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_DIR") of + false when Remote =:= offline -> + update_context(Context, mnesia_dir, undefined, default); + false -> + mnesia_dir_from_node(Context); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, environment) + end; +mnesia_dir(Context) -> + mnesia_dir_from_env(Context). + +mnesia_dir_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_DIR") of + false -> + Dir = get_default_mnesia_dir(Context), + update_context(Context, mnesia_dir, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, environment) + end. + +mnesia_dir_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, application, get_env, [mnesia, dir]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {mnesia, dir, undefined}}); + {ok, {ok, Value}} -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, remote_node); + {badrpc, nodedown} -> + update_context(Context, mnesia_dir, undefined, default) + end. + +get_default_mnesia_dir(#{os_type := {unix, _}, + nodename := Nodename, + mnesia_base_dir := MnesiaBaseDir}) + when MnesiaBaseDir =/= undefined -> + filename:join(MnesiaBaseDir, atom_to_list(Nodename)); +get_default_mnesia_dir(#{os_type := {win32, _}, + nodename := Nodename, + mnesia_base_dir := MnesiaBaseDir}) + when MnesiaBaseDir =/= undefined -> + filename:join(MnesiaBaseDir, atom_to_list(Nodename) ++ "-mnesia"). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_QUORUM_DIR +%% Directory where to store Ra state for quorum queues. +%% Default: ${RABBITMQ_MNESIA_DIR}/quorum + +quorum_queue_dir(#{mnesia_dir := MnesiaDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_QUORUM_DIR") of + false when MnesiaDir =/= undefined -> + Dir = filename:join(MnesiaDir, "quorum"), + update_context(Context, quorum_queue_dir, Dir, default); + false when MnesiaDir =:= undefined -> + update_context(Context, quorum_queue_dir, undefined, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, quorum_queue_dir, Dir, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PID_FILE +%% File used to write the Erlang VM OS PID. +%% Default: ${RABBITMQ_MNESIA_DIR}.pid +%% +%% RABBITMQ_KEEP_PID_FILE_ON_EXIT +%% Whether to keep or remove the PID file on Erlang VM exit. +%% Default: true + +pid_file(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_prefixed_env_var("RABBITMQ_PID_FILE") of + false when MnesiaBaseDir =/= undefined -> + File = filename:join(MnesiaBaseDir, + atom_to_list(Nodename) ++ ".pid"), + update_context(Context, pid_file, File, default); + false when MnesiaBaseDir =:= undefined -> + update_context(Context, pid_file, undefined, default); + Value -> + File = normalize_path(Value), + update_context(Context, pid_file, File, environment) + end. + +keep_pid_file_on_exit(Context) -> + case get_prefixed_env_var("RABBITMQ_KEEP_PID_FILE_ON_EXIT") of + false -> + update_context(Context, keep_pid_file_on_exit, false, default); + Value -> + Keep = value_is_yes(Value), + update_context(Context, keep_pid_file_on_exit, Keep, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_FEATURE_FLAGS_FILE +%% File used to store enabled feature flags. +%% Default: ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags + +feature_flags_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_FEATURE_FLAGS_FILE") of + false when Remote =:= offline -> + update_context(Context, feature_flags_file, undefined, default); + false -> + feature_flags_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, environment) + end; +feature_flags_file(Context) -> + feature_flags_file_from_env(Context). + +feature_flags_file_from_env(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_env_var("RABBITMQ_FEATURE_FLAGS_FILE") of + false -> + File = filename:join(MnesiaBaseDir, + atom_to_list(Nodename) ++ "-feature_flags"), + update_context(Context, feature_flags_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, environment) + end. + +feature_flags_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, + application, get_env, [rabbit, feature_flags_file]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, feature_flags_file, undefined}}); + {ok, {ok, Value}} -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, remote_node); + {badrpc, nodedown} -> + update_context(Context, feature_flags_file, undefined, default) + end. + +forced_feature_flags_on_init(Context) -> + Value = get_prefixed_env_var("RABBITMQ_FEATURE_FLAGS", + [keep_empty_string_as_is]), + case Value of + false -> + %% get_prefixed_env_var() considers an empty string + %% is the same as an undefined environment variable. + update_context(Context, + forced_feature_flags_on_init, undefined, default); + _ -> + Flags = [list_to_atom(V) || V <- string:lexemes(Value, ",")], + update_context(Context, + forced_feature_flags_on_init, Flags, environment) + end. + +log_feature_flags_registry(Context) -> + case get_prefixed_env_var("RABBITMQ_LOG_FF_REGISTRY") of + false -> + update_context(Context, + log_feature_flags_registry, false, default); + Value -> + Log = value_is_yes(Value), + update_context(Context, + log_feature_flags_registry, Log, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PLUGINS_DIR +%% List of directories where to look for plugins. +%% Directories are separated by: +%% ':' on Unix +%% ';' on Windows +%% Default: ${RABBITMQ_HOME}/plugins +%% +%% RABBITMQ_PLUGINS_EXPAND_DIR +%% Directory where to expand plugin archives. +%% Default: ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand +%% +%% RABBITMQ_ENABLED_PLUGINS_FILE +%% File where the list of enabled plugins is stored. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/enabled_plugins +%% (Windows) ${RABBITMQ_BASE}\enabled_plugins +%% +%% RABBITMQ_ENABLED_PLUGINS +%% List of plugins to enable on startup. +%% Values are: +%% "ALL" to enable all plugins +%% "" to enable no plugin +%% a list of plugin names, separated by a coma (',') +%% Default: Empty (i.e. use ${RABBITMQ_ENABLED_PLUGINS_FILE}) + +plugins_path(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_DIR") of + false when Remote =:= offline -> + update_context(Context, plugins_path, undefined, default); + false -> + plugins_path_from_node(Context); + Path -> + update_context(Context, plugins_path, Path, environment) + end; +plugins_path(Context) -> + plugins_path_from_env(Context). + +plugins_path_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_DIR") of + false -> + Path = get_default_plugins_path_from_env(Context), + update_context(Context, plugins_path, Path, default); + Path -> + update_context(Context, plugins_path, Path, environment) + end. + +plugins_path_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, application, get_env, [rabbit, plugins_dir]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, plugins_dir, undefined}}); + {ok, {ok, Path}} -> + update_context(Context, plugins_path, Path, remote_node); + {badrpc, nodedown} -> + update_context(Context, plugins_path, undefined, default) + end. + +get_default_plugins_path(#{from_remote_node := offline}) -> + undefined; +get_default_plugins_path(#{from_remote_node := Remote}) -> + get_default_plugins_path_from_node(Remote); +get_default_plugins_path(Context) -> + get_default_plugins_path_from_env(Context). + +get_default_plugins_path_from_env(#{os_type := OSType}) -> + ThisModDir = this_module_dir(), + PluginsDir = rabbit_common_mod_location_to_plugins_dir(ThisModDir), + case {OSType, PluginsDir} of + {{unix, _}, "/usr/lib/rabbitmq/" ++ _} -> + UserPluginsDir = filename:join( + ["/", "usr", "lib", "rabbitmq", "plugins"]), + UserPluginsDir ++ ":" ++ PluginsDir; + _ -> + PluginsDir + end. + +get_default_plugins_path_from_node(Remote) -> + Ret = query_remote(Remote, code, where_is_file, ["rabbit_common.app"]), + case Ret of + {ok, non_existing = Error} -> + throw({query, Remote, {code, where_is_file, Error}}); + {ok, Path} -> + rabbit_common_mod_location_to_plugins_dir(filename:dirname(Path)); + {badrpc, nodedown} -> + undefined + end. + +rabbit_common_mod_location_to_plugins_dir(ModDir) -> + case filename:basename(ModDir) of + "ebin" -> + case filelib:is_dir(ModDir) of + false -> + %% rabbit_common in the plugin's .ez archive. + filename:dirname( + filename:dirname( + filename:dirname(ModDir))); + true -> + %% rabbit_common in the plugin's directory. + filename:dirname( + filename:dirname(ModDir)) + end; + _ -> + %% rabbit_common in the CLI escript. + filename:join( + filename:dirname( + filename:dirname(ModDir)), + "plugins") + end. + +plugins_expand_dir(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_EXPAND_DIR") of + false when MnesiaBaseDir =/= undefined -> + Dir = filename:join( + MnesiaBaseDir, + atom_to_list(Nodename) ++ "-plugins-expand"), + update_context(Context, plugins_expand_dir, Dir, default); + false when MnesiaBaseDir =:= undefined -> + update_context(Context, plugins_expand_dir, undefined, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, plugins_expand_dir, Dir, environment) + end. + +enabled_plugins_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_ENABLED_PLUGINS_FILE") of + false when Remote =:= offline -> + update_context(Context, enabled_plugins_file, undefined, default); + false -> + enabled_plugins_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, environment) + end; +enabled_plugins_file(Context) -> + enabled_plugins_file_from_env(Context). + +enabled_plugins_file_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_ENABLED_PLUGINS_FILE") of + false -> + File = get_default_enabled_plugins_file(Context), + update_context(Context, enabled_plugins_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, environment) + end. + +get_default_enabled_plugins_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "enabled_plugins"). + +enabled_plugins_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, + application, get_env, [rabbit, enabled_plugins_file]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, enabled_plugins_file, undefined}}); + {ok, {ok, Value}} -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, remote_node); + {badrpc, nodedown} -> + update_context(Context, enabled_plugins_file, undefined, default) + end. + +enabled_plugins(Context) -> + Value = get_prefixed_env_var( + "RABBITMQ_ENABLED_PLUGINS", + [keep_empty_string_as_is]), + case Value of + false -> + update_context(Context, enabled_plugins, undefined, default); + "ALL" -> + update_context(Context, enabled_plugins, all, environment); + "" -> + update_context(Context, enabled_plugins, [], environment); + _ -> + Plugins = [list_to_atom(P) || P <- string:lexemes(Value, ",")], + update_context(Context, enabled_plugins, Plugins, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_NODE_IP_ADDRESS +%% AMQP TCP IP address to listen on +%% Default: unset (i.e. listen on all interfaces) +%% +%% RABBITMQ_NODE_PORT +%% AMQP TCP port. +%% Default: 5672 +%% +%% RABBITMQ_DIST_PORT +%% Erlang distribution TCP port. +%% Default: ${RABBITMQ_NODE_PORT} + 20000 + +amqp_ipaddr(Context) -> + case get_prefixed_env_var("RABBITMQ_NODE_IP_ADDRESS") of + false -> + update_context(Context, amqp_ipaddr, "auto", default); + Value -> + update_context(Context, amqp_ipaddr, Value, environment) + end. + +amqp_tcp_port(Context) -> + case get_prefixed_env_var("RABBITMQ_NODE_PORT") of + false -> + update_context(Context, amqp_tcp_port, 5672, default); + TcpPortStr -> + try + TcpPort = erlang:list_to_integer(TcpPortStr), + update_context(Context, amqp_tcp_port, TcpPort, environment) + catch + _:badarg -> + rabbit_log_prelaunch:error( + "Invalid value for $RABBITMQ_NODE_PORT: ~p", + [TcpPortStr]), + throw({exit, ex_config}) + end + end. + +erlang_dist_tcp_port(#{amqp_tcp_port := AmqpTcpPort} = Context) -> + case get_prefixed_env_var("RABBITMQ_DIST_PORT") of + false -> + TcpPort = AmqpTcpPort + 20000, + update_context(Context, erlang_dist_tcp_port, TcpPort, default); + TcpPortStr -> + try + TcpPort = erlang:list_to_integer(TcpPortStr), + update_context(Context, + erlang_dist_tcp_port, TcpPort, environment) + catch + _:badarg -> + rabbit_log_prelaunch:error( + "Invalid value for $RABBITMQ_DIST_PORT: ~p", + [TcpPortStr]), + throw({exit, ex_config}) + end + end. + +%% ------------------------------------------------------------------- +%% +%% SYS_PREFIX [Unix only] +%% Default: "" +%% +%% RABBITMQ_BASE [Windows only] +%% Directory where to put RabbitMQ data. +%% Default: !APPDATA!\RabbitMQ + +sys_prefix(#{os_type := {unix, _}} = Context) -> + case get_env_var("SYS_PREFIX") of + false -> + update_context(Context, sys_prefix, "", default); + Value -> + Dir = normalize_path(Value), + update_context(Context, sys_prefix, Dir, environment) + end; +sys_prefix(Context) -> + Context. + +rabbitmq_base(#{os_type := {win32, _}} = Context) -> + case get_env_var("RABBITMQ_BASE") of + false -> + AppData = normalize_path(get_env_var("APPDATA")), + Dir = filename:join(AppData, "RabbitMQ"), + update_context(Context, rabbitmq_base, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, rabbitmq_base, Dir, environment) + end; +rabbitmq_base(Context) -> + Context. + +data_dir(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + Dir = filename:join([SysPrefix, "var", "lib", "rabbitmq"]), + update_context(Context, data_dir, Dir); +data_dir(#{os_type := {win32, _}, + rabbitmq_base := RabbitmqBase} = Context) -> + update_context(Context, data_dir, RabbitmqBase). + +rabbitmq_home(Context) -> + case get_env_var("RABBITMQ_HOME") of + false -> + Dir = filename:dirname(get_default_plugins_path(Context)), + update_context(Context, rabbitmq_home, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, rabbitmq_home, Dir, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_ALLOW_INPUT +%% Indicate if an Erlang shell is started or not. +%% Default: false + +interactive_shell(Context) -> + case get_env_var("RABBITMQ_ALLOW_INPUT") of + false -> + update_context(Context, + interactive_shell, false, default); + Value -> + update_context(Context, + interactive_shell, value_is_yes(Value), environment) + end. + +%% FIXME: We would need a way to call isatty(3) to make sure the output +%% is a terminal. +output_supports_colors(#{os_type := {unix, _}} = Context) -> + update_context(Context, output_supports_colors, true, default); +output_supports_colors(#{os_type := {win32, _}} = Context) -> + update_context(Context, output_supports_colors, false, default). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PRODUCT_NAME +%% Override the product name +%% Default: unset (i.e. "RabbitMQ") +%% +%% RABBITMQ_PRODUCT_VERSION +%% Override the product version +%% Default: unset (i.e. `rabbit` application version). +%% +%% RABBITMQ_MOTD_FILE +%% Indicate a filename containing a "message of the day" to add to +%% the banners, both the logged and the printed ones. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/motd +%% (Windows) ${RABBITMQ_BASE}\motd.txt + +product_name(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_NAME") of + false when Remote =:= offline -> + update_context(Context, product_name, undefined, default); + false -> + product_name_from_node(Context); + Value -> + update_context(Context, product_name, Value, environment) + end; +product_name(Context) -> + product_name_from_env(Context). + +product_name_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_NAME") of + false -> + update_context(Context, product_name, undefined, default); + Value -> + update_context(Context, product_name, Value, environment) + end. + +product_name_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, product_name, [])), + case Ret of + {badrpc, nodedown} -> + update_context(Context, product_name, undefined, default); + {query, _, _} -> + update_context(Context, product_name, undefined, default); + Value -> + update_context(Context, product_name, Value, remote_node) + end. + +product_version(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_VERSION") of + false when Remote =:= offline -> + update_context(Context, product_version, undefined, default); + false -> + product_version_from_node(Context); + Value -> + update_context(Context, product_version, Value, environment) + end; +product_version(Context) -> + product_version_from_env(Context). + +product_version_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_VERSION") of + false -> + update_context(Context, product_version, undefined, default); + Value -> + update_context(Context, product_version, Value, environment) + end. + +product_version_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, product_version, [])), + case Ret of + {badrpc, _} -> + update_context(Context, product_version, undefined, default); + {query, _, _} -> + update_context(Context, product_version, undefined, default); + Value -> + update_context(Context, product_version, Value, remote_node) + end. + +motd_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MOTD_FILE") of + false when Remote =:= offline -> + update_context(Context, motd_file, undefined, default); + false -> + motd_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, motd_file, File, environment) + end; +motd_file(Context) -> + motd_file_from_env(Context). + +motd_file_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MOTD_FILE") of + false -> + File = get_default_motd_file(Context), + update_context(Context, motd_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, motd_file, File, environment) + end. + +get_default_motd_file(#{os_type := {unix, _}, + config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "motd"); +get_default_motd_file(#{os_type := {win32, _}, + config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "motd.txt"). + +motd_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, motd_file, [])), + case Ret of + {badrpc, _} -> + update_context(Context, motd_file, undefined, default); + {query, _, _} -> + update_context(Context, motd_file, undefined, default); + File -> + update_context(Context, motd_file, File, remote_node) + end. + +%% ------------------------------------------------------------------- +%% Loading of rabbitmq-env.conf. +%% ------------------------------------------------------------------- + +load_conf_env_file(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + {ConfEnvFile, Origin} = + case get_prefixed_env_var("RABBITMQ_CONF_ENV_FILE") of + false -> + File = filename:join( + [SysPrefix, "etc", "rabbitmq", "rabbitmq-env.conf"]), + {File, default}; + Value -> + {normalize_path(Value), environment} + end, + Context1 = update_context(Context, conf_env_file, ConfEnvFile, Origin), + case loading_conf_env_file_enabled(Context1) of + true -> + case filelib:is_regular(ConfEnvFile) of + false -> + rabbit_log_prelaunch:debug( + "No $RABBITMQ_CONF_ENV_FILE (~ts)", [ConfEnvFile]), + Context1; + true -> + case os:find_executable("sh") of + false -> Context1; + Sh -> do_load_conf_env_file(Context1, + Sh, + ConfEnvFile) + end + end; + false -> + rabbit_log_prelaunch:debug( + "Loading of $RABBITMQ_CONF_ENV_FILE (~ts) is disabled", + [ConfEnvFile]), + Context1 + end; +load_conf_env_file(#{os_type := {win32, _}, + rabbitmq_base := RabbitmqBase} = Context) -> + {ConfEnvFile, Origin} = + case get_prefixed_env_var("RABBITMQ_CONF_ENV_FILE") of + false -> + File = filename:join([RabbitmqBase, "rabbitmq-env-conf.bat"]), + {File, default}; + Value -> + {normalize_path(Value), environment} + end, + Context1 = update_context(Context, conf_env_file, ConfEnvFile, Origin), + case loading_conf_env_file_enabled(Context1) of + true -> + rabbit_log_prelaunch:notice( + "Loading of $RABBITMQ_CONF_ENV_FILE (~s) " + "is not implemented for Windows", + [ConfEnvFile]), + Context1; + false -> + rabbit_log_prelaunch:debug( + "Loading of $RABBITMQ_CONF_ENV_FILE (~ts) is disabled", + [ConfEnvFile]), + Context1 + end; +load_conf_env_file(Context) -> + Context. + +-spec loading_conf_env_file_enabled(map()) -> boolean(). + +-ifdef(TEST). +loading_conf_env_file_enabled(_) -> + persistent_term:get({?MODULE, load_conf_env_file}, true). +-else. +loading_conf_env_file_enabled(_) -> + %% When this module is built without `TEST` defined, we want this + %% function to always return true. However, this makes Dialyzer + %% think it can only return true: this is not the case when the + %% module is compiled with `TEST` defined. The following line is + %% here to trick Dialyzer. + erlang:get({?MODULE, always_undefined}) =:= undefined. +-endif. + +do_load_conf_env_file(Context, Sh, ConfEnvFile) -> + rabbit_log_prelaunch:debug( + "Sourcing $RABBITMQ_CONF_ENV_FILE: ~ts", [ConfEnvFile]), + Marker = rabbit_misc:format( + "-----BEGIN VARS LIST FOR PID ~s-----", [os:getpid()]), + Script = rabbit_misc:format( + ". \"~ts\" && " + "echo \"~s\" && " + "set", [ConfEnvFile, Marker]), + Args = ["-ex", "-c", Script], + + #{sys_prefix := SysPrefix, + rabbitmq_home := RabbitmqHome} = Context, + MainConfigFile = re:replace( + get_default_main_config_file(Context), + "\\.(conf|config)$", "", [{return, list}]), + Env = [ + {"SYS_PREFIX", SysPrefix}, + {"RABBITMQ_HOME", RabbitmqHome}, + {"CONFIG_FILE", MainConfigFile}, + {"ADVANCED_CONFIG_FILE", get_default_advanced_config_file(Context)}, + {"MNESIA_BASE", get_default_mnesia_base_dir(Context)}, + {"ENABLED_PLUGINS_FILE", get_default_enabled_plugins_file(Context)}, + {"PLUGINS_DIR", get_default_plugins_path_from_env(Context)}, + {"CONF_ENV_FILE_PHASE", "rabbtimq-prelaunch"} + ], + + Port = erlang:open_port( + {spawn_executable, Sh}, + [{args, Args}, + {env, Env}, + binary, + use_stdio, + stderr_to_stdout, + exit_status]), + collect_sh_output(Context, Port, Marker, <<>>). + +collect_sh_output(Context, Port, Marker, Output) -> + receive + {Port, {exit_status, ExitStatus}} -> + rabbit_log_prelaunch:debug( + "$RABBITMQ_CONF_ENV_FILE exit status: ~b", [ExitStatus]), + DecodedOutput = unicode:characters_to_list(Output), + Lines = string:split(string:trim(DecodedOutput), "\n", all), + rabbit_log_prelaunch:debug("$RABBITMQ_CONF_ENV_FILE output:"), + [rabbit_log_prelaunch:debug(" ~ts", [Line]) + || Line <- Lines], + case ExitStatus of + 0 -> parse_conf_env_file_output(Context, Marker, Lines); + _ -> Context + end; + {Port, {data, Chunk}} -> + collect_sh_output(Context, Port, Marker, [Output, Chunk]) + end. + +parse_conf_env_file_output(Context, _, []) -> + Context; +parse_conf_env_file_output(Context, Marker, [Marker | Lines]) -> + %% Found our marker, let's parse variables. + parse_conf_env_file_output1(Context, Lines, #{}); +parse_conf_env_file_output(Context, Marker, [_ | Lines]) -> + parse_conf_env_file_output(Context, Marker, Lines). + +parse_conf_env_file_output1(Context, [], Vars) -> + %% Re-export variables. + lists:foreach( + fun(Var) -> + IsUsed = var_is_used(Var), + IsSet = var_is_set(Var), + case IsUsed andalso not IsSet of + true -> + rabbit_log_prelaunch:debug( + "$RABBITMQ_CONF_ENV_FILE: re-exporting variable $~s", + [Var]), + os:putenv(Var, maps:get(Var, Vars)); + false -> + ok + end + end, lists:sort(maps:keys(Vars))), + Context; +parse_conf_env_file_output1(Context, [Line | Lines], Vars) -> + SetXOutput = is_sh_set_x_output(Line), + ShFunction = is_sh_function(Line, Lines), + if + SetXOutput -> + parse_conf_env_file_output1(Context, Lines, Vars); + ShFunction -> + skip_sh_function(Context, Lines, Vars); + true -> + case string:split(Line, "=") of + [Var, IncompleteValue] -> + {Value, Lines1} = parse_sh_literal(IncompleteValue, Lines), + Vars1 = Vars#{Var => Value}, + parse_conf_env_file_output1(Context, Lines1, Vars1); + _ -> + %% Parsing failed somehow. + rabbit_log_prelaunch:warning( + "Failed to parse $RABBITMQ_CONF_ENV_FILE output: ~p", + [Line]), + Context + end + end. + +is_sh_set_x_output(Line) -> + re:run(Line, "^\\++ ", [{capture, none}]) =:= match. + +is_sh_function(_, []) -> + false; +is_sh_function(Line, Lines) -> + re:run(Line, "\\s\\(\\)\\s*$", [{capture, none}]) =:= match + andalso + re:run(hd(Lines), "^\\s*\\{\\s*$", [{capture, none}]) =:= match. + +parse_sh_literal("'" ++ SingleQuoted, Lines) -> + parse_single_quoted_literal(SingleQuoted, Lines, ""); +parse_sh_literal("$'" ++ DollarSingleQuoted, Lines) -> + parse_dollar_single_quoted_literal(DollarSingleQuoted, Lines, ""); +parse_sh_literal(Unquoted, Lines) -> + {Unquoted, Lines}. + +parse_single_quoted_literal([$'], Lines, Literal) -> + %% We reached the closing single quote. + {lists:reverse(Literal), Lines}; +parse_single_quoted_literal([], [Line | Lines], Literal) -> + %% We reached the end of line before finding the closing single + %% quote. The literal continues on the next line and includes that + %% newline character. + parse_single_quoted_literal(Line, Lines, [$\n | Literal]); +parse_single_quoted_literal([C | Rest], Lines, Literal) -> + parse_single_quoted_literal(Rest, Lines, [C | Literal]). + +parse_dollar_single_quoted_literal([$'], Lines, Literal) -> + %% We reached the closing single quote. + {lists:reverse(Literal), Lines}; +parse_dollar_single_quoted_literal([], [Line | Lines], Literal) -> + %% We reached the end of line before finding the closing single + %% quote. The literal continues on the next line and includes that + %% newline character. + parse_dollar_single_quoted_literal(Line, Lines, [$\n | Literal]); +parse_dollar_single_quoted_literal([C | Rest], Lines, Literal) -> + parse_dollar_single_quoted_literal(Rest, Lines, [C | Literal]). + +skip_sh_function(Context, ["}" | Lines], Vars) -> + parse_conf_env_file_output1(Context, Lines, Vars); +skip_sh_function(Context, [_ | Lines], Vars) -> + skip_sh_function(Context, Lines, Vars). + +%% ------------------------------------------------------------------- +%% Helpers. +%% ------------------------------------------------------------------- + +get_env_var(VarName) -> + get_env_var(VarName, []). + +get_env_var(VarName, Options) -> + KeepEmptyString = lists:member(keep_empty_string_as_is, Options), + case os:getenv(VarName) of + false -> false; + "" when not KeepEmptyString -> false; + Value -> Value + end. + +get_prefixed_env_var(VarName) -> + get_prefixed_env_var(VarName, []). + +get_prefixed_env_var("RABBITMQ_" ++ Suffix = VarName, + Options) -> + case get_env_var(VarName, Options) of + false -> get_env_var(Suffix, Options); + Value -> Value + end. + +var_is_used("RABBITMQ_" ++ _ = PrefixedVar) -> + lists:member(PrefixedVar, ?USED_ENV_VARS); +var_is_used("HOME") -> + false; +var_is_used(Var) -> + lists:member("RABBITMQ_" ++ Var, ?USED_ENV_VARS). + +var_is_set("RABBITMQ_" ++ Var = PrefixedVar) -> + os:getenv(PrefixedVar) /= false orelse + os:getenv(Var) /= false; +var_is_set(Var) -> + os:getenv("RABBITMQ_" ++ Var) /= false orelse + os:getenv(Var) /= false. + +value_is_yes(Value) when is_list(Value) orelse is_binary(Value) -> + Options = [{capture, none}, caseless], + re:run(string:trim(Value), "^(1|yes|true)$", Options) =:= match; +value_is_yes(_) -> + false. + +normalize_path("" = Path) -> + Path; +normalize_path(Path) -> + filename:join(filename:split(Path)). + +this_module_dir() -> + File = code:which(?MODULE), + %% Possible locations: + %% - the rabbit_common plugin (as an .ez archive): + %% .../plugins/rabbit_common-$version.ez/rabbit_common-$version/ebin + %% - the rabbit_common plugin (as a directory): + %% .../plugins/rabbit_common-$version/ebin + %% - the CLI: + %% .../escript/$cli + filename:dirname(File). + +maybe_setup_dist_for_remote_query( + #{from_remote_node := offline} = Context) -> + Context; +maybe_setup_dist_for_remote_query( + #{from_remote_node := {RemoteNode, _}} = Context) -> + {NamePart, HostPart} = rabbit_nodes_common:parts(RemoteNode), + NameType = rabbit_nodes_common:name_type(RemoteNode), + ok = rabbit_nodes_common:ensure_epmd(), + Context1 = setup_dist_for_remote_query( + Context, NamePart, HostPart, NameType, 50), + case is_rabbitmq_loaded_on_remote_node(Context1) of + true -> Context1; + false -> maybe_stop_dist_for_remote_query( + update_context(Context, from_remote_node, offline)) + end; +maybe_setup_dist_for_remote_query(Context) -> + Context. + +setup_dist_for_remote_query( + #{dist_started_for_remote_query := true} = Context, + _, _, _, _) -> + Context; +setup_dist_for_remote_query(Context, _, _, _, 0) -> + Context; +setup_dist_for_remote_query(#{from_remote_node := {Remote, _}} = Context, + NamePart, HostPart, NameType, + Attempts) -> + RndNamePart = NamePart ++ "_ctl_" ++ integer_to_list(rand:uniform(100)), + Nodename = rabbit_nodes_common:make({RndNamePart, HostPart}), + case net_kernel:start([Nodename, NameType]) of + {ok, _} -> + update_context(Context, dist_started_for_remote_query, true); + {error, {already_started, _}} -> + Context; + {error, {{already_started, _}, _}} -> + Context; + Error -> + logger:error( + "rabbit_env: Failed to setup distribution (as ~s) to " + "query node ~s: ~p", + [Nodename, Remote, Error]), + setup_dist_for_remote_query(Context, + NamePart, HostPart, NameType, + Attempts - 1) + end. + +is_rabbitmq_loaded_on_remote_node( + #{from_remote_node := Remote}) -> + case query_remote(Remote, application, loaded_applications, []) of + {ok, Apps} -> + lists:keymember(mnesia, 1, Apps) andalso + lists:keymember(rabbit, 1, Apps); + _ -> + false + end. + +maybe_stop_dist_for_remote_query( + #{dist_started_for_remote_query := true} = Context) -> + net_kernel:stop(), + maps:remove(dist_started_for_remote_query, Context); +maybe_stop_dist_for_remote_query(Context) -> + Context. + +query_remote({RemoteNode, Timeout}, Mod, Func, Args) -> + Ret = rpc:call(RemoteNode, Mod, Func, Args, Timeout), + case Ret of + {badrpc, nodedown} = Error -> Error; + {badrpc, _} = Error -> throw({query, RemoteNode, Error}); + _ -> {ok, Ret} + end. diff --git a/deps/rabbit_common/src/rabbit_error_logger_handler.erl b/deps/rabbit_common/src/rabbit_error_logger_handler.erl index f42cbf4435e8dca8530361317c02f2eb27cd67e5..de8d254dd8a7a45776ef3940073b6cf7e30e0b25 100644 --- a/deps/rabbit_common/src/rabbit_error_logger_handler.erl +++ b/deps/rabbit_common/src/rabbit_error_logger_handler.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_error_logger_handler). diff --git a/deps/rabbit_common/src/rabbit_event.erl b/deps/rabbit_common/src/rabbit_event.erl index 0fc6555dc3171722f966c801c097ef2db2b20d6f..a320379aeda689d7933ccb393120fd5fdcb24135 100644 --- a/deps/rabbit_common/src/rabbit_event.erl +++ b/deps/rabbit_common/src/rabbit_event.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_event). @@ -154,11 +154,11 @@ if_enabled(C, P, Fun) -> notify_if(true, Type, Props) -> notify(Type, Props); notify_if(false, _Type, _Props) -> ok. -notify(Type, Props) -> notify(Type, Props, none). +notify(Type, Props) -> notify(Type, rabbit_data_coercion:to_proplist(Props), none). notify(Type, Props, Ref) -> %% Using {Name, node()} here to not fail if the event handler is not started - gen_event:notify({?MODULE, node()}, event_cons(Type, Props, Ref)). + gen_event:notify({?MODULE, node()}, event_cons(Type, rabbit_data_coercion:to_proplist(Props), Ref)). sync_notify(Type, Props) -> sync_notify(Type, Props, none). diff --git a/deps/rabbit_common/src/rabbit_exchange_type.erl b/deps/rabbit_common/src/rabbit_exchange_type.erl index 4b921db0cf6a8e79f7bb723d1f5bc5bb74c91790..47ca15e4d414d1c79bed17f1fa0e5002c67119e9 100644 --- a/deps/rabbit_common/src/rabbit_exchange_type.erl +++ b/deps/rabbit_common/src/rabbit_exchange_type.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_exchange_type). diff --git a/deps/rabbit_common/src/rabbit_heartbeat.erl b/deps/rabbit_common/src/rabbit_heartbeat.erl index ed40f74a959f78d529f43f07678f08dd4275378a..9c8907cdd1d04ef1a81af5ec119029ebcd1bd16d 100644 --- a/deps/rabbit_common/src/rabbit_heartbeat.erl +++ b/deps/rabbit_common/src/rabbit_heartbeat.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_heartbeat). diff --git a/deps/rabbit_common/src/rabbit_json.erl b/deps/rabbit_common/src/rabbit_json.erl index 103624257ab9313b666a377c29c4c2579e2ed75b..887b6ce9843f44ab008923df77881d11c9a9551a 100644 --- a/deps/rabbit_common/src/rabbit_json.erl +++ b/deps/rabbit_common/src/rabbit_json.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_json). diff --git a/deps/rabbit_common/src/rabbit_log.erl b/deps/rabbit_common/src/rabbit_log.erl index 63e1a7f85d181eeea277acda269e49e49568dd8e..40cad934cc05623e09b283e11b794d9caa05218d 100644 --- a/deps/rabbit_common/src/rabbit_log.erl +++ b/deps/rabbit_common/src/rabbit_log.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_log). @@ -31,7 +31,17 @@ -include("rabbit_log.hrl"). %%---------------------------------------------------------------------------- --type category() :: connection | channel | ldap | mirroring | queue | federation | upgrade | ra. +-type category() :: channel | + connection | + federation | + feature_flags | + ldap | + mirroring | + prelaunch | + queue | + ra | + shovel | + upgrade. -spec debug(string()) -> 'ok'. -spec debug(string(), [any()]) -> 'ok'. @@ -74,17 +84,20 @@ log(Category, Level, Fmt, Args) when is_list(Args) -> end, lager:log(Sink, Level, self(), Fmt, Args). -make_internal_sink_name(connection) -> rabbit_log_connection_lager_event; make_internal_sink_name(channel) -> rabbit_log_channel_lager_event; +make_internal_sink_name(connection) -> rabbit_log_connection_lager_event; +make_internal_sink_name(default) -> rabbit_log_lager_event; +make_internal_sink_name(feature_flags) -> rabbit_log_feature_flags_lager_event; +make_internal_sink_name(federation) -> rabbit_log_federation_lager_event; make_internal_sink_name(ldap) -> rabbit_log_ldap_lager_event; make_internal_sink_name(mirroring) -> rabbit_log_mirroring_lager_event; +make_internal_sink_name(prelaunch) -> rabbit_log_prelaunch_lager_event; make_internal_sink_name(queue) -> rabbit_log_queue_lager_event; -make_internal_sink_name(federation) -> rabbit_log_federation_lager_event; +make_internal_sink_name(ra) -> rabbit_log_ra_lager_event; make_internal_sink_name(shovel) -> rabbit_log_shovel_lager_event; make_internal_sink_name(upgrade) -> rabbit_log_upgrade_lager_event; -make_internal_sink_name(ra) -> rabbit_log_ra_lager_event; -make_internal_sink_name(default) -> rabbit_log_lager_event; -make_internal_sink_name(Category) -> erlang:error({unknown_category, Category}). +make_internal_sink_name(Category) -> + erlang:error({unknown_category, Category}). debug(Format) -> debug(Format, []). debug(Format, Args) -> debug(self(), Format, Args). diff --git a/deps/rabbit_common/src/rabbit_log_ra_shim.erl b/deps/rabbit_common/src/rabbit_log_ra_shim.erl index 52e844b1afe82870bf018ef4196b33add19f5671..2009e6c5c357848738fd383716ea09dc166025c5 100644 --- a/deps/rabbit_common/src/rabbit_log_ra_shim.erl +++ b/deps/rabbit_common/src/rabbit_log_ra_shim.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_log_ra_shim). diff --git a/deps/rabbit_common/src/rabbit_misc.erl b/deps/rabbit_common/src/rabbit_misc.erl index 1b928f6877863da83bd72399187c4a36b1bfc723..d99b6b821676589523d0d84ecf64ff7cdcc6089c 100644 --- a/deps/rabbit_common/src/rabbit_misc.erl +++ b/deps/rabbit_common/src/rabbit_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_misc). @@ -58,7 +58,10 @@ -export([version_minor_equivalent/2, strict_version_minor_equivalent/2]). -export([dict_cons/3, orddict_cons/3, maps_cons/3, gb_trees_cons/3]). -export([gb_trees_fold/3, gb_trees_foreach/2]). --export([all_module_attributes/1, build_acyclic_graph/3]). +-export([all_module_attributes/1, + rabbitmq_related_module_attributes/1, + module_attributes_from_apps/2, + build_acyclic_graph/3]). -export([const/1]). -export([ntoa/1, ntoab/1]). -export([is_process_alive/1]). @@ -939,11 +942,30 @@ module_attributes(Module) -> end. all_module_attributes(Name) -> + Apps = [App || {App, _, _} <- application:loaded_applications()], + module_attributes_from_apps(Name, Apps). + +rabbitmq_related_module_attributes(Name) -> + Apps = rabbitmq_related_apps(), + module_attributes_from_apps(Name, Apps). + +rabbitmq_related_apps() -> + [App + || {App, _, _} <- application:loaded_applications(), + %% Only select RabbitMQ-related applications. + App =:= rabbit_common orelse + App =:= rabbitmq_prelaunch orelse + App =:= rabbit orelse + lists:member( + rabbit, + element(2, application:get_key(App, applications)))]. + +module_attributes_from_apps(Name, Apps) -> Targets = lists:usort( lists:append( [[{App, Module} || Module <- Modules] || - {App, _, _} <- application:loaded_applications(), + App <- Apps, {ok, Modules} <- [application:get_key(App, modules)]])), lists:foldl( fun ({App, Module}, Acc) -> @@ -1139,12 +1161,29 @@ is_os_process_alive(Pid) -> run_ps(Pid) =:= 0 end}, {win32, fun () -> - Cmd = "tasklist /nh /fi \"pid eq " ++ - rabbit_data_coercion:to_list(Pid) ++ "\" ", - Res = os_cmd(Cmd ++ "2>&1"), - case re:run(Res, "erl\\.exe", [{capture, none}]) of - match -> true; - _ -> false + PidS = rabbit_data_coercion:to_list(Pid), + case os:find_executable("tasklist.exe") of + false -> + Cmd = + format( + "PowerShell -Command " + "\"(Get-Process -Id ~s).ProcessName\"", + [PidS]), + Res = + os_cmd(Cmd ++ " 2>&1") -- [$\r, $\n], + case Res of + "erl" -> true; + "werl" -> true; + _ -> false + end; + _ -> + Cmd = + "tasklist /nh /fi " + "\"pid eq " ++ PidS ++ "\"", + Res = os_cmd(Cmd ++ " 2>&1"), + match =:= re:run(Res, + "erl\\.exe", + [{capture, none}]) end end}]). diff --git a/deps/rabbit_common/src/rabbit_msg_store_index.erl b/deps/rabbit_common/src/rabbit_msg_store_index.erl index 957cb12f905a5a2e9e248111dd93101a5562b7c7..97b4000dcdebb46ae197ec528988a4a2b133368e 100644 --- a/deps/rabbit_common/src/rabbit_msg_store_index.erl +++ b/deps/rabbit_common/src/rabbit_msg_store_index.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_msg_store_index). diff --git a/deps/rabbit_common/src/rabbit_net.erl b/deps/rabbit_common/src/rabbit_net.erl index aaba85c8902093b4ab8e737c6ba512984f538775..cb9969bc2d5e7962ccd468f10ba7d5ed9aee0d2b 100644 --- a/deps/rabbit_common/src/rabbit_net.erl +++ b/deps/rabbit_common/src/rabbit_net.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_net). diff --git a/deps/rabbit_common/src/rabbit_nodes_common.erl b/deps/rabbit_common/src/rabbit_nodes_common.erl index d9648ea447bb863b9ddacdf3bd63bfcdec31e750..1b24712b4228c116f3010cf5fae1d976b69d005b 100644 --- a/deps/rabbit_common/src/rabbit_nodes_common.erl +++ b/deps/rabbit_common/src/rabbit_nodes_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_nodes_common). @@ -26,7 +26,7 @@ %% API %% --export([make/1, parts/1, names/1, ensure_epmd/0, is_running/2, is_process_running/2]). +-export([make/1, parts/1, names/1, name_type/1, ensure_epmd/0, is_running/2, is_process_running/2]). -export([cookie_hash/0, epmd_port/0, diagnostics/1]). -spec make({string(), string()} | string()) -> node(). @@ -52,7 +52,10 @@ names(Hostname) -> {'DOWN', MRef, process, Pid, Reason} -> {error, Reason} end. -make({Prefix, Suffix}) -> list_to_atom(lists:append([Prefix, "@", Suffix])); +make({Prefix, Suffix}) -> rabbit_data_coercion:to_atom( + lists:append([rabbit_data_coercion:to_list(Prefix), + "@", + rabbit_data_coercion:to_list(Suffix)])); make(NodeStr) -> make(parts(NodeStr)). parts(Node) when is_atom(Node) -> @@ -64,6 +67,13 @@ parts(NodeStr) -> {Prefix, Suffix} -> {Prefix, tl(Suffix)} end. +name_type(Node) -> + {_, HostPart} = parts(Node), + case lists:member($., HostPart) of + false -> shortnames; + true -> longnames + end. + epmd_port() -> case init:get_argument(epmd_port) of {ok, [[Port | _] | _]} when is_list(Port) -> Port; diff --git a/deps/rabbit_common/src/rabbit_password_hashing.erl b/deps/rabbit_common/src/rabbit_password_hashing.erl index 1a5849d2bd3b1f75c85658e57692a3c31fc42215..9b944d941b30049340ebd81cbb9417e5846b3ce7 100644 --- a/deps/rabbit_common/src/rabbit_password_hashing.erl +++ b/deps/rabbit_common/src/rabbit_password_hashing.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_password_hashing). diff --git a/deps/rabbit_common/src/rabbit_pbe.erl b/deps/rabbit_common/src/rabbit_pbe.erl index 5961badcdfbd70ceed97a9645780aba151b9d82f..451805066ba1f74ac185fa672b8f613e298c0d66 100644 --- a/deps/rabbit_common/src/rabbit_pbe.erl +++ b/deps/rabbit_common/src/rabbit_pbe.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_pbe). @@ -20,6 +20,8 @@ -export([encrypt_term/5, decrypt_term/5]). -export([encrypt/5, decrypt/5]). +-export_type([encryption_result/0]). + supported_ciphers() -> credentials_obfuscation_pbe:supported_ciphers(). @@ -41,15 +43,21 @@ default_iterations() -> encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term) -> credentials_obfuscation_pbe:encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term). -decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - credentials_obfuscation_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary). +decrypt_term(_Cipher, _Hash, _Iterations, _PassPhrase, {plaintext, Term}) -> + Term; +decrypt_term(Cipher, Hash, Iterations, PassPhrase, {encrypted, _Base64Binary}=Encrypted) -> + credentials_obfuscation_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, Encrypted). + +-type encryption_result() :: {'encrypted', binary()} | {'plaintext', binary()}. -spec encrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). + pos_integer(), iodata() | '$pending-secret', binary()) -> encryption_result(). encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText) -> credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText). -spec decrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary). \ No newline at end of file + pos_integer(), iodata(), encryption_result()) -> any(). +decrypt(_Cipher, _Hash, _Iterations, _PassPhrase, {plaintext, Term}) -> + Term; +decrypt(Cipher, Hash, Iterations, PassPhrase, {encrypted, _Base64Binary}=Encrypted) -> + credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, PassPhrase, Encrypted). diff --git a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl index 66af27068ab375a83128c919966875ebaac8ee2d..af3683e72b5fe174322692b7235520ccecb1f282 100644 --- a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl +++ b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl @@ -2,6 +2,7 @@ %% from rabbitmq-autocluster by Gavin Roy. %% %% Copyright (c) 2014-2015 AWeber Communications +%% Copyright (c) 2016-2020 VMware, Inc. or its affiliates %% All rights reserved. %% %% Redistribution and use in source and binary forms, with or without modification, @@ -31,7 +32,7 @@ %% %% The Initial Developer of the Original Code is AWeber Communications. %% Copyright (c) 2014-2015 AWeber Communications -%% Copyright (c) 2016-2017 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2016-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_peer_discovery_backend). diff --git a/deps/rabbit_common/src/rabbit_policy_validator.erl b/deps/rabbit_common/src/rabbit_policy_validator.erl index c07c39a3ce231fdd0eca8363c4fc6f88c8a72510..57db42ff02b5b73333adba5ce16d5ebfcaa202b5 100644 --- a/deps/rabbit_common/src/rabbit_policy_validator.erl +++ b/deps/rabbit_common/src/rabbit_policy_validator.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_policy_validator). diff --git a/deps/rabbit_common/src/rabbit_queue_collector.erl b/deps/rabbit_common/src/rabbit_queue_collector.erl index bc482e0c05fb6891db785fb2c050e3e29f11051a..e85a53c9231a8eda74e0b41ab858fa2e71b95776 100644 --- a/deps/rabbit_common/src/rabbit_queue_collector.erl +++ b/deps/rabbit_common/src/rabbit_queue_collector.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_queue_collector). diff --git a/deps/rabbit_common/src/rabbit_registry.erl b/deps/rabbit_common/src/rabbit_registry.erl index b7214f58dfb5750b2a4eaffcb2dbbd0fd9a051f8..c1fc00dae638faa6fd991991e9813053938db014 100644 --- a/deps/rabbit_common/src/rabbit_registry.erl +++ b/deps/rabbit_common/src/rabbit_registry.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_registry). diff --git a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl index c80dc53673062e9252aeb7b35bc501211cfd76d8..9d3dd27288eb450a894a3e790873a27921ff1ed0 100644 --- a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl +++ b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% diff --git a/deps/rabbit_common/src/rabbit_runtime.erl b/deps/rabbit_common/src/rabbit_runtime.erl index 04a7ecf301cb17a5fdf092ce6197385282a18fbc..c5bc028e41dce9ea2f4049ac4da5aa935f536891 100644 --- a/deps/rabbit_common/src/rabbit_runtime.erl +++ b/deps/rabbit_common/src/rabbit_runtime.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% This module provides access to runtime metrics that are exposed diff --git a/deps/rabbit_common/src/rabbit_runtime_parameter.erl b/deps/rabbit_common/src/rabbit_runtime_parameter.erl index 01b2cb889009a84175db1024aa522080dfad7a2d..07f91e60b5ecbf31ad671a41449af67238ef5b0d 100644 --- a/deps/rabbit_common/src/rabbit_runtime_parameter.erl +++ b/deps/rabbit_common/src/rabbit_runtime_parameter.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_runtime_parameter). diff --git a/deps/rabbit_common/src/rabbit_ssl_options.erl b/deps/rabbit_common/src/rabbit_ssl_options.erl index 40c2f9ab80fea6ea6a6780cb0783e67dc9d44b08..2e839d83ff35ac4cfd52191c77608f74a584c41d 100644 --- a/deps/rabbit_common/src/rabbit_ssl_options.erl +++ b/deps/rabbit_common/src/rabbit_ssl_options.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_ssl_options). diff --git a/deps/rabbit_common/src/rabbit_types.erl b/deps/rabbit_common/src/rabbit_types.erl index 76673f04476b8777bb1db6dc3f709b1a569a0370..99ff5c1d4055d8d77276b6294bf45f9e76708692 100644 --- a/deps/rabbit_common/src/rabbit_types.erl +++ b/deps/rabbit_common/src/rabbit_types.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_types). diff --git a/deps/rabbit_common/src/rabbit_writer.erl b/deps/rabbit_common/src/rabbit_writer.erl index 5cbc4f7cd54fc96a625a86b985e7895735ea863e..6b29892ac664379f4409d2ecb268959a1b87e34a 100644 --- a/deps/rabbit_common/src/rabbit_writer.erl +++ b/deps/rabbit_common/src/rabbit_writer.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_writer). diff --git a/deps/rabbit_common/src/supervisor2.erl b/deps/rabbit_common/src/supervisor2.erl index 06ecc5f8d198ced54e5558f28ee0f378df1f3134..a6a45f506ea3fb550e7c8feca23298a6756b7dab 100644 --- a/deps/rabbit_common/src/supervisor2.erl +++ b/deps/rabbit_common/src/supervisor2.erl @@ -40,7 +40,7 @@ %% 5) normal, and {shutdown, _} exit reasons are all treated the same %% (i.e. are regarded as normal exits) %% -%% All modifications are (C) 2010-2013 GoPivotal, Inc. +%% All modifications are (C) 2010-2020 VMware, Inc. or its affiliates. %% %% %CopyrightBegin% %% diff --git a/deps/rabbit_common/src/vm_memory_monitor.erl b/deps/rabbit_common/src/vm_memory_monitor.erl index 5e2e9e64063ff989683892bd4992fc14c0f9c487..7b7a4a9d8436090317c235500d83e208134711c9 100644 --- a/deps/rabbit_common/src/vm_memory_monitor.erl +++ b/deps/rabbit_common/src/vm_memory_monitor.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% In practice Erlang shouldn't be allowed to grow to more than a half diff --git a/deps/rabbit_common/src/worker_pool.erl b/deps/rabbit_common/src/worker_pool.erl index 3348b72ad16a481b0922246d1f75030f33db21ce..3928db6cae06b71a735552302d890a4f65d719a1 100644 --- a/deps/rabbit_common/src/worker_pool.erl +++ b/deps/rabbit_common/src/worker_pool.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool). @@ -52,6 +52,7 @@ -export([start_link/1, submit/1, submit/2, submit/3, submit_async/1, submit_async/2, + dispatch_sync/1, dispatch_sync/2, ready/2, idle/2, default_pool/0]). @@ -68,6 +69,7 @@ -spec submit(fun (() -> A) | mfargs(), 'reuse' | 'single') -> A. -spec submit(atom(), fun (() -> A) | mfargs(), 'reuse' | 'single') -> A. -spec submit_async(fun (() -> any()) | mfargs()) -> 'ok'. +-spec dispatch_sync(fun(() -> any()) | mfargs()) -> 'ok'. -spec ready(atom(), pid()) -> 'ok'. -spec idle(atom(), pid()) -> 'ok'. -spec default_pool() -> atom(). @@ -103,6 +105,13 @@ submit_async(Fun) -> submit_async(?DEFAULT_POOL, Fun). submit_async(Server, Fun) -> gen_server2:cast(Server, {run_async, Fun}). +dispatch_sync(Fun) -> + dispatch_sync(?DEFAULT_POOL, Fun). + +dispatch_sync(Server, Fun) -> + Pid = gen_server2:call(Server, {next_free, self()}, infinity), + worker_pool_worker:submit_async(Pid, Fun). + ready(Server, WPid) -> gen_server2:cast(Server, {ready, WPid}). idle(Server, WPid) -> gen_server2:cast(Server, {idle, WPid}). diff --git a/deps/rabbit_common/src/worker_pool_sup.erl b/deps/rabbit_common/src/worker_pool_sup.erl index 557f7aad5e196b6ef245fa5beca8a127833f9014..01f831daa6a074bf7b3c69a1d27815fa3f24b2c5 100644 --- a/deps/rabbit_common/src/worker_pool_sup.erl +++ b/deps/rabbit_common/src/worker_pool_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool_sup). diff --git a/deps/rabbit_common/src/worker_pool_worker.erl b/deps/rabbit_common/src/worker_pool_worker.erl index d32a35c57f32b97e35016048cd962f15531753ad..09b5868a8dd3974e21c0433ed8d219f19760fe86 100644 --- a/deps/rabbit_common/src/worker_pool_worker.erl +++ b/deps/rabbit_common/src/worker_pool_worker.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool_worker). @@ -60,7 +60,7 @@ submit(Pid, Fun, ProcessModel) -> gen_server2:call(Pid, {submit, Fun, self(), ProcessModel}, infinity). submit_async(Pid, Fun) -> - gen_server2:cast(Pid, {submit_async, Fun}). + gen_server2:cast(Pid, {submit_async, Fun, self()}). set_maximum_since_use(Pid, Age) -> gen_server2:cast(Pid, {set_maximum_since_use, Age}). @@ -118,7 +118,13 @@ handle_cast({next_job_from, CPid}, {job, CPid, From, Fun, ProcessModel}) -> ok = worker_pool:idle(get(worker_pool_name), self()), {noreply, undefined, hibernate}; -handle_cast({submit_async, Fun}, undefined) -> +handle_cast({submit_async, Fun, _CPid}, undefined) -> + run(Fun), + ok = worker_pool:idle(get(worker_pool_name), self()), + {noreply, undefined, hibernate}; + +handle_cast({submit_async, Fun, CPid}, {from, CPid, MRef}) -> + erlang:demonitor(MRef), run(Fun), ok = worker_pool:idle(get(worker_pool_name), self()), {noreply, undefined, hibernate}; diff --git a/deps/rabbitmq_amqp1_0/erlang.mk b/deps/rabbitmq_amqp1_0/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_amqp1_0/erlang.mk +++ b/deps/rabbitmq_amqp1_0/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_amqp1_0/rabbitmq-components.mk b/deps/rabbitmq_amqp1_0/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_amqp1_0/rabbitmq-components.mk +++ b/deps/rabbitmq_amqp1_0/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl index 62ae275c14c5c973c88e6d0a2f7359fb56b7d6cb..100d180f7a88028c90f3c04ab66c4f6fa78a1ff5 100644 --- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl +++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl @@ -322,8 +322,12 @@ handle_1_0_frame(Mode, Channel, Payload, State) -> catch _:#'v1_0.error'{} = Reason -> handle_exception(State, 0, Reason); - _:Reason -> - Trace = erlang:get_stacktrace(), + _:{error, {not_allowed, Username}} -> + %% section 2.8.15 in http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-complete-v1.0-os.pdf + handle_exception(State, 0, error_frame( + ?V_1_0_AMQP_ERROR_UNAUTHORIZED_ACCESS, + "Access for user '~s' was refused: insufficient permissions~n", [Username])); + _:Reason:Trace -> handle_exception(State, 0, error_frame( ?V_1_0_AMQP_ERROR_INTERNAL_ERROR, "Reader error: ~p~n~p~n", @@ -418,6 +422,12 @@ handle_1_0_connection_frame(#'v1_0.open'{ max_frame_size = ClientFrameMax, heartbeater = Heartbeater, queue_collector = Collector} end, + HostnameVal = case Hostname of + undefined -> undefined; + {utf8, Val} -> Val + end, + rabbit_log:debug("AMQP 1.0 connection.open frame: hostname = ~s, extracted vhost = ~s, idle_timeout = ~p" , + [HostnameVal, vhost(Hostname), HeartbeatSec * 1000]), %% TODO enforce channel_max ok = send_on_channel0( Sock, @@ -703,6 +713,8 @@ send_to_new_1_0_session(Channel, Frame, State) -> put({ch_fr_pid, ChFrPid}, {channel, Channel}), ok = rabbit_amqp1_0_session:process_frame(ChFrPid, Frame); {error, {not_allowed, _}} -> + rabbit_log:error("AMQP 1.0: user '~s' is not allowed to access virtual host '~s'", + [User#user.username, vhost(Hostname)]), %% Let's skip the supervisor trace, this is an expected error throw({error, {not_allowed, User#user.username}}); {error, _} = E -> @@ -785,14 +797,10 @@ ssl_info(F, #v1{sock = Sock}) -> {error, _} -> ''; {ok, Items} -> P = proplists:get_value(protocol, Items), - CS = proplists:get_value(cipher_suite, Items), - %% The first form is R14. - %% The second is R13 - the extra term is exportability (by - %% inspection, the docs are wrong). - case CS of - {K, C, H} -> F({P, {K, C, H}}); - {K, C, H, _} -> F({P, {K, C, H}}) - end + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value(selected_cipher_suite, Items), + F({P, {K, C, H}}) end. cert_info(F, #v1{sock = Sock}) -> diff --git a/deps/rabbitmq_auth_backend_cache/README.md b/deps/rabbitmq_auth_backend_cache/README.md index 239574fbba063c3e28c089350d2dc2cd595f5f1d..78b6daf9b083efdec9eccfaca31f5e530d3fd4a1 100644 --- a/deps/rabbitmq_auth_backend_cache/README.md +++ b/deps/rabbitmq_auth_backend_cache/README.md @@ -12,7 +12,7 @@ As of 3.7.0, this plugin is distributed with RabbitMQ. This plugin provides a way to cache [authentication and authorization backend](https://rabbitmq.com/access-control.html) results for a configurable amount of time. It's not an independent auth backend but a caching layer for existing backends -such as the built-in, [LDAP](github.com/rabbitmq/rabbitmq-auth-backend-ldap), or [HTTP](github.com/rabbitmq/rabbitmq-auth-backend-http) +such as the built-in, [LDAP](https://github.com/rabbitmq/rabbitmq-auth-backend-ldap), or [HTTP](https://github.com/rabbitmq/rabbitmq-auth-backend-http) ones. Cache expiration is currently time-based. It is not very useful with the built-in diff --git a/deps/rabbitmq_auth_backend_cache/erlang.mk b/deps/rabbitmq_auth_backend_cache/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_auth_backend_cache/erlang.mk +++ b/deps/rabbitmq_auth_backend_cache/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema b/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema index 70d51fa3865952ccc1798da48077f83c53857e39..383931f20a0483176ec5eddc9b213bd4f1407b54 100644 --- a/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema +++ b/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema @@ -38,7 +38,7 @@ fun(Conf) -> cuttlefish:warn(io_lib:format("Cached authZ backend undefined. Using ~p", [AuthN])), {AuthN, AuthN}; {undefined, undefined, V} when V =/= undefined -> - cuttlefish:warn(io_lib:format("Cached suthN backend undefined. Using ~p", [AuthZ])), + cuttlefish:warn(io_lib:format("Cached authN backend undefined. Using ~p", [AuthZ])), {AuthZ, AuthZ}; {V, undefined, undefined} when V =/= undefined -> Common; diff --git a/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_http/erlang.mk b/deps/rabbitmq_auth_backend_http/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_auth_backend_http/erlang.mk +++ b/deps/rabbitmq_auth_backend_http/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch b/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch index a583f4aa2fb2f598de434c2dad972424d98085ee..1df395585037702bcefa25d9e4e624070bf753ed 100644 --- a/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch +++ b/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch @@ -1,11 +1,11 @@ ---- ../rabbit_common/.travis.yml 2020-03-04 13:38:36.985065000 +0100 -+++ .travis.yml 2020-03-04 14:29:42.563905000 +0100 -@@ -43,8 +43,6 @@ - current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" - - make xref - current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" -- - make tests -- current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" - - after_failure: - - | +--- .travis.yml.orig 2020-03-26 15:55:03.107179000 +0100 ++++ .travis.yml 2020-03-26 15:55:22.294603000 +0100 +@@ -13,6 +13,8 @@ + apt: + packages: + - awscli ++ - slapd ++ - ldap-utils + cache: + apt: true + env: diff --git a/deps/rabbitmq_auth_backend_ldap/TESTING.md b/deps/rabbitmq_auth_backend_ldap/TESTING.md index 2fa505bc74be0ad5994c092c77a2278c5d2f7ba6..1db58c9f1986aff942bbed355dcaf8c87354a217 100644 --- a/deps/rabbitmq_auth_backend_ldap/TESTING.md +++ b/deps/rabbitmq_auth_backend_ldap/TESTING.md @@ -2,19 +2,17 @@ ## The OpenLDAP Dependency -If you have [Vagrant](https://www.vagrantup.com) installed you -can simply `vagrant up` from the root of the project directory. -This will start a vagrant box with OpenLDAP running, accessible -on local port 3890. -Alternatively run OpenLDAP locally on a local port specified via the `LDAP_PORT` environment variable -(3890 by default to avoid conflicts) and use -`example/setup.sh` to create the appropriate ldap databases. - -**IMPORTANT**: this will **wipe out your local OpenLDAP installation**! -The setup script currently needs to be executed between test suite runs, -too. - -The test setup will seed the LDAP database with the required objects. +The testsuite depends on an OpenLDAP server. slapd(8) and the CLI must +be installed for it to work. However there is no need to configure the +server. + +The testsuite takes care of starting its own server and configuring it. +It won't conflict with the system OpenLDAP server instance. + +The testsuite needs the following modules to be available: +* `bdb` +* `memberof` +* `refint` ## Running All Suites diff --git a/deps/rabbitmq_auth_backend_ldap/Vagrantfile b/deps/rabbitmq_auth_backend_ldap/Vagrantfile deleted file mode 100644 index c1780998decfc5e89418a9e9352d0ed4d7a9cbec..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_auth_backend_ldap/Vagrantfile +++ /dev/null @@ -1,10 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure(2) do |config| - config.vm.box = 'ubuntu/bionic64' - config.vm.network "forwarded_port", guest: 389, host: 3890 - config.vm.provision "shell", inline: "sudo apt-get -y update" - config.vm.provision "file", source: "example", destination: "~/example" - config.vm.provision "shell", inline: "/bin/sh /home/vagrant/example/setup.sh" -end diff --git a/deps/rabbitmq_auth_backend_ldap/erlang.mk b/deps/rabbitmq_auth_backend_ldap/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_auth_backend_ldap/erlang.mk +++ b/deps/rabbitmq_auth_backend_ldap/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_ldap/example/README.md b/deps/rabbitmq_auth_backend_ldap/example/README.md new file mode 100644 index 0000000000000000000000000000000000000000..61b65312c16c33751dacbcdc95546a5f06cff396 --- /dev/null +++ b/deps/rabbitmq_auth_backend_ldap/example/README.md @@ -0,0 +1,2 @@ +LDIFs files come from the following article: +https://technicalnotes.wordpress.com/2014/04/19/openldap-setup-with-memberof-overlay/ diff --git a/deps/rabbitmq_auth_backend_ldap/example/seed.sh b/deps/rabbitmq_auth_backend_ldap/example/seed.sh deleted file mode 100755 index 9082bedb161e7ec0c4f8943b6cd80e9eb2b1f875..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_auth_backend_ldap/example/seed.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -e - -DIR=$(dirname $0) - -sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ${DIR}/global.ldif -sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/memberof_init.ldif -sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/refint_1.ldif -sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/refint_2.ldif diff --git a/deps/rabbitmq_auth_backend_ldap/example/setup.sh b/deps/rabbitmq_auth_backend_ldap/example/setup.sh deleted file mode 100755 index 8194efec84ebf58918cd77465fd245f7afc603bd..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_auth_backend_ldap/example/setup.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -e -export DEBIAN_FRONTEND=noninteractive -sudo apt-get --yes purge slapd -sudo rm -rf /var/lib/ldap -echo -e " \ -slapd slapd/internal/generated_adminpw password openstack -slapd slapd/password2 password openstack -slapd slapd/internal/adminpw password openstack -slapd slapd/password1 password openstack -slapd slapd/backend select BDB -" | sudo debconf-set-selections -sudo apt-get --yes install slapd ldap-utils -sleep 1 - -DIR=$(dirname $0) - -$DIR/seed.sh diff --git a/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl index 3a11b40a1a1167a1cf41f54d5a1988ae74661ef8..f45562521cd5e3128279fbbeddc176edae4eed4c 100644 --- a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl +++ b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl @@ -531,45 +531,50 @@ with_login(_Creds, _Servers, _Opts, _Fun, 0 = _RetriesLeft) -> {error, ldap_connect_error}; with_login(Creds, Servers, Opts, Fun, RetriesLeft) -> case get_or_create_conn(Creds == anon, Servers, Opts) of - {ok, LDAP} -> - case Creds of - anon -> - ?L1("anonymous bind", []), - case call_ldap_fun(Fun, LDAP) of - {error, ldap_closed} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - Other -> Other - end; - {UserDN, Password} -> - case eldap:simple_bind(LDAP, UserDN, Password) of - ok -> - ?L1("bind succeeded: ~s", - [scrub_dn(UserDN, env(log))]), - case call_ldap_fun(Fun, LDAP, UserDN) of - {error, ldap_closed} -> - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, {gen_tcp_error, _}} -> - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - Other -> Other - end; - {error, invalidCredentials} -> - ?L1("bind returned \"invalid credentials\": ~s", - [scrub_dn(UserDN, env(log))]), - {refused, UserDN, []}; - {error, ldap_closed} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, {gen_tcp_error, _}} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, E} -> - ?L1("bind error: ~p ~p", - [scrub_dn(UserDN, env(log)), E]), - %% Do not report internal bind error to a client - {error, ldap_bind_error} - end - end; + {ok, {ConnType, LDAP}} -> + Result = case Creds of + anon -> + ?L1("anonymous bind", []), + case call_ldap_fun(Fun, LDAP) of + {error, ldap_closed} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + Other -> Other + end; + {UserDN, Password} -> + case eldap:simple_bind(LDAP, UserDN, Password) of + ok -> + ?L1("bind succeeded: ~s", + [scrub_dn(UserDN, env(log))]), + case call_ldap_fun(Fun, LDAP, UserDN) of + {error, ldap_closed} -> + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, {gen_tcp_error, _}} -> + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + Other -> Other + end; + {error, invalidCredentials} -> + ?L1("bind returned \"invalid credentials\": ~s", + [scrub_dn(UserDN, env(log))]), + {refused, UserDN, []}; + {error, ldap_closed} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, {gen_tcp_error, _}} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, E} -> + ?L1("bind error: ~p ~p", + [scrub_dn(UserDN, env(log)), E]), + %% Do not report internal bind error to a client + {error, ldap_bind_error} + end + end, + ok = case ConnType of + eldap_transient -> eldap:close(LDAP); + _ -> ok + end, + Result; Error -> ?L1("connect error: ~p", [Error]), case Error of @@ -614,18 +619,24 @@ get_or_create_conn(IsAnon, Servers, Opts) -> Timeout = rabbit_misc:pget(idle_timeout, Opts, infinity), %% Defer the timeout by re-setting it. set_connection_timeout(Key, Timeout), - {ok, Conn}; + {ok, {eldap_pooled, Conn}}; error -> {Timeout, EldapOpts} = case lists:keytake(idle_timeout, 1, Opts) of false -> {infinity, Opts}; {value, {idle_timeout, T}, EOpts} -> {T, EOpts} end, - case eldap_open(Servers, EldapOpts) of - {ok, Conn} -> + case {eldap_open(Servers, EldapOpts), Timeout} of + %% If the timeout was set to 0, treat it as a one-off connection. + %% See rabbitmq/rabbitmq-auth-backend-ldap#120 for background. + {{ok, Conn}, 0} -> + {ok, {eldap_transient, Conn}}; + %% Non-zero timeout, put it in the pool + {{ok, Conn}, Timeout} -> put(ldap_conns, maps:put(Key, Conn, Conns)), set_connection_timeout(Key, Timeout), - {ok, Conn}; - Error -> Error + {ok, {eldap_pooled, Conn}}; + {Error, _} -> + Error end end. diff --git a/deps/rabbitmq_auth_backend_oauth2/README.md b/deps/rabbitmq_auth_backend_oauth2/README.md index fd27839cabf1a3d09547b9a9667a30ca99ae77e9..8257205706d5c842e081532a2dfa2ddd06ab3bf5 100644 --- a/deps/rabbitmq_auth_backend_oauth2/README.md +++ b/deps/rabbitmq_auth_backend_oauth2/README.md @@ -2,18 +2,21 @@ [![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-auth-backend-oauth2.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-auth-backend-oauth2) -This **experimental** [RabbitMQ authentication/authorisation backend](https://www.rabbitmq.com/access-control.html) plugin lets applications (clients) +This [RabbitMQ authentication/authorisation backend](https://www.rabbitmq.com/access-control.html) plugin lets applications (clients) and users authenticate and authorize using JWT-encoded [OAuth 2.0 access tokens](https://tools.ietf.org/html/rfc6749#section-1.4). It is not specific to but developed against [Cloud Foundry UAA](https://github.com/cloudfoundry/uaa). -OAuth 2.0 primers are available [elsewhere on the Web](https://auth0.com/blog/oauth2-the-complete-guide/). +An OAuth 2.0 primer is available [elsewhere on the Web](https://auth0.com/blog/oauth2-the-complete-guide/). ## Supported RabbitMQ Versions -This plugins is developed for RabbitMQ 3.8 (currently in development) and has to be built -against compatible RabbitMQ server, e.g. using the [umbrella repository](https://github.com/rabbitmq/rabbitmq-public-umbrella). +The plugin targets and ships with RabbitMQ 3.8. Like all RabbitMQ [plugins](https://www.rabbitmq.com/plugins.html), it must be enabled before it can be used: + +``` shell +rabbitmq-plugins enable rabbitmq_auth_backend_oauth2 +``` ## How it Works @@ -32,7 +35,7 @@ of this plugin. To use this plugin -1. A symmetrically encrypted JWT token containing a set of RabbitMQ permission scopes. +1. UAA should be configured to produce encrypted JWT tokens containing a set of RabbitMQ permission scopes 2. All RabbitMQ nodes must be [configured to use the `rabbit_auth_backend_oauth2` backend](https://www.rabbitmq.com/access-control.html) 3. All RabbitMQ nodes must be configure with a resource service ID (`resource_server_id`) that matches the scope prefix (e.g. `rabbitmq` in `rabbitmq.read:*/*`). @@ -41,6 +44,8 @@ To use this plugin 1. Client authorize with OAuth 2.0 provider, requesting an `access_token` (using any grant type desired) 2. Token scope returned by OAuth 2.0 provider must include RabbitMQ resource scopes that follow a convention used by this plugin: `configure:%2F/foo` means "configure permissions for 'foo' in vhost '/'") 3. Client passes the token as password when connecting to a RabbitMQ node. **The username field is ignored**. +4. The translated permissions are stored as part of the authenticated connection state and used the same + way permissions from RabbitMQ's internal database would be used. ## Usage @@ -100,7 +105,7 @@ VwIDAQAB ]. ``` -If you are using a symmetric key, the configuration will look like this: +If a symmetric key is used, the configuration will look like this: ```erlang [ @@ -117,8 +122,6 @@ If you are using a symmetric key, the configuration will look like this: ]. ``` -Key signature verification is implemented by the [UAA JWT library](https://github.com/rabbitmq/uaa_jwt). - ### Resource Server ID and Scope Prefixes OAuth 2.0 (and thus UAA-provided) tokens use scopes to communicate what set of permissions particular @@ -153,7 +156,7 @@ There can be multiple wildcards in a pattern: * `start*middle*end` * `*before*after*` -**If you want to use special characters like `*`, `%`, or `/` in a wildcard pattern, +**To use special characters like `*`, `%`, or `/` in a wildcard pattern, the pattern must be [URL-encoded](https://en.wikipedia.org/wiki/Percent-encoding).** These are the typical permissions examples: @@ -187,13 +190,13 @@ In the OAuth context, tags can be added as part of the scope, using a format lik example, if `resource_server_id` is "my_rabbit", a scope to grant access to the management plugin with the `monitoring` tag will be `my_rabbit.tag:monitoring`. -### Examples +## Examples The [demo](/demo) directory contains example configuration files which can be used to set up a development UAA server and issue tokens, which can be used to access RabbitMQ resources. -#### UAA and RabbitMQ Config Files +### UAA and RabbitMQ Config Files To run the demo you need to have a [UAA](https://github.com/cloudfoundry/uaa) node installed or built from source. @@ -213,7 +216,7 @@ To run UAA with a custom config file path, use the following from the UAA git re CLOUDFOUNDRY_CONFIG_PATH=/demo/symmetric_keys ./gradlew run ``` -#### Running RabbitMQ +### Running RabbitMQ ``` RABBITMQ_CONFIG_FILE=/demo/symmetric_keys/rabbitmq rabbitmq-server @@ -223,13 +226,13 @@ make run-broker RABBITMQ_CONFIG_FILE=demo/symmetric_keys/rabbitmq The `rabbitmq_auth_backend_oauth2` plugin must be enabled on the RabbitMQ node. -#### Asymmetric Key Example +### Asymmetric Key Example To use an RSA (asymmetric) key, you can set `CLOUDFOUNDRY_CONFIG_PATH` to `demo/rsa_keys`. This directory also contains `rabbit.config` file, as well as a public key (`public_key.pem`) which will be used for signature verification. -#### UAA User and Permission Management +### UAA User and Permission Management UAA sets scopes from client scopes and user groups. The demo uses groups to set up a set of RabbitMQ permissions scopes. diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb b/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb index be068c1518c68cee82acb2e31c01a76d5ff32fe6..9ff2145ccfd49e8c5e88d79d1455dbb021811d7d 100644 --- a/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb +++ b/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb @@ -8,7 +8,10 @@ queues.each do |q| vhost = split[0] queue_name = split[1] - conn = Bunny.new(:vhost => vhost) + conn = Bunny.new(:host => ENV["BUNNY_HOST"] || "127.0.0.1", + :user => ENV["BUNNY_USER"] || "guest", + :pass => ENV["BUNNY_PASS"] || "guest", + :vhost => vhost) conn.start ch = conn.create_channel ch.queue(queue_name) diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d93c77c15a85471333724121a283b40993a7fa2b --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile @@ -0,0 +1,101 @@ +PLATFORM := $(shell uname) + +ifeq ($(PLATFORM),Darwin) +HOST_DOCKER := host.docker.internal +endif + +ifeq ($(PLATFORM),Linux) +HOST_DOCKER := $(shell ip addr show docker0 | grep -Po 'inet \K[\d.]+') +endif + +.DEFAULT_GOAL = test + +.PHONY: run-uaa +run-uaa: + docker exec uaa /bin/echo \ + || docker run \ + --detach \ + --name uaa \ + --publish 8080:8080 \ + --mount type=bind,source=$(CURDIR)/uaa,target=/etc/uaa \ + --env JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" \ + pkuryloski/uaa:74.15.0 + +.PHONY: run-rabbitmq +run-rabbitmq: run-uaa + docker exec rabbitmq /bin/echo \ + || docker run \ + --detach \ + --name rabbitmq \ + --publish 5672:5672 \ + --publish 15672:15672 \ + --mount type=bind,source="$(CURDIR)"/rabbitmq,target=/etc/rabbitmq \ + rabbitmq:3.8-management + +.PHONY: wait-rabbitmq +wait-rabbitmq: run-rabbitmq + docker exec rabbitmq rabbitmq-diagnostics ping -q \ + || (sleep 15; docker exec rabbitmq rabbitmq-diagnostics ping -q) + +.PHONY: vhosts +vhosts: wait-rabbitmq + docker exec rabbitmq rabbitmqctl add_vhost uaa_vhost + docker exec rabbitmq rabbitmqctl add_vhost other_vhost + docker exec rabbitmq rabbitmqctl set_permissions -p uaa_vhost admin '.*' '.*' '.*' + docker exec rabbitmq rabbitmqctl set_permissions -p other_vhost admin '.*' '.*' '.*' + +.PHONY: uaac-bunny-image +uaac-bunny-image: + docker images | grep "^uaac\s" \ + || docker run --name uaac ruby:2.5 gem install cf-uaac bunny + docker images | grep "^uaac\s" \ + || (docker commit $$(docker ps -aqf "name=^uaac$$") uaac:latest \ + && docker rm uaac) + +.PHONY: queues +queues: vhosts uaac-bunny-image + docker run -it --rm \ + --name declare-queues \ + --mount type=bind,source="$(CURDIR)"/../declare_queues.rb,target=/workspace/declare_queues.rb \ + -w /workspace \ + uaac \ + /bin/bash -c "BUNNY_HOST=$(HOST_DOCKER) \ + BUNNY_USER=admin \ + BUNNY_PASS=rabo2 \ + ruby declare_queues.rb \ + uaa_vhost/some_queue \ + uaa_vhost/other_queue \ + other_vhost/some_queue \ + other_vhost/other_queue" + +.PHONY: tokens +tokens: queues uaac-bunny-image + docker run -it --rm \ + --name fetch-tokens \ + uaac \ + /bin/bash -c " \ + uaac target http://$(HOST_DOCKER):8080/uaa \ + && uaac signing key \ + && uaac token owner get rabbit_client rabbit_super -s rabbit_secret -p rabbit_super \ + && uaac token owner get rabbit_client rabbit_nosuper -s rabbit_secret -p rabbit_nosuper \ + && uaac context rabbit_nosuper \ + && uaac context rabbit_super" + +.PHONY: check-token +check-token: queues uaac-bunny-image + docker run -it --rm \ + --name check-token \ + --mount type=bind,source="$(CURDIR)"/check_token.rb,target=/workspace/check_token.rb \ + uaac \ + /bin/bash -c " \ + uaac target http://$(HOST_DOCKER):8080/uaa \ + && uaac token owner get rabbit_client rabbit_super -s rabbit_secret -p rabbit_super \ + && BUNNY_HOST=$(HOST_DOCKER) ruby /workspace/check_token.rb" + +.PHONY: test +test: check-token + +.PHONY: cleanup +cleanup: + docker stop rabbitmq uaa + docker rm rabbitmq uaa \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb new file mode 100644 index 0000000000000000000000000000000000000000..051adc835c90b09a39ce384692a6fff7ee2d8c19 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'net/http' +require 'bunny' +require 'yaml' + +host = ENV["BUNNY_HOST"] + +config = YAML.load_file('/root/.uaac.yml') +access_token = config["http://#{host}:8080/uaa"]["contexts"]["rabbit_super"]["access_token"] + +conn = Bunny.new(:host => host, + :user => "", + :pass => access_token, + :vhost => "uaa_vhost") +conn.start +puts "Connected via AMQP!" +conn.stop + +uri = URI("http://#{host}:15672/api/vhosts") +req = Net::HTTP::Get.new(uri) +req['Authorization'] = "Bearer #{access_token}" + +res = Net::HTTP.start(uri.hostname, uri.port) { |http| + http.request(req) +} + +raise "Could not connect to managment API." unless res.is_a?(Net::HTTPSuccess) +puts "Connected via Management Plugin API!" +puts res.body diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins new file mode 100644 index 0000000000000000000000000000000000000000..a23c6a883a7d07ba9d93e7f8e29b636d05a002f4 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins @@ -0,0 +1 @@ +[rabbitmq_management,rabbitmq_auth_backend_oauth2]. \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config new file mode 100644 index 0000000000000000000000000000000000000000..a85cca56bb16c4db6350e946cbad3ef784b98bd9 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config @@ -0,0 +1,30 @@ +[ + {rabbit, [ + {default_user, <<"admin">>}, + {default_pass, <<"rabo2">>}, + {auth_backends, [rabbit_auth_backend_oauth2, rabbit_auth_backend_internal]} + ]}, + {rabbitmq_management, [ + {enable_uaa, true}, + {uaa_client_id, "rabbit_client"}, + {uaa_location, "http://localhost:8080/uaa"} + ]}, + {rabbitmq_auth_backend_oauth2, [ + {resource_server_id, <<"rabbitmq">>}, + {key_config, [ + {default_key, <<"key-1">>}, + {signing_keys, + #{<<"key-1">> => {pem, <<"-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dP+vRn+Kj+S/oGd49kq +6+CKNAduCC1raLfTH7B3qjmZYm45yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhK +IdcIWadhqDzdtn1hj/22iUwrhH0bd475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2 +B9q9KFBmo4Ahh/6+d4wM1rH9kxl0RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF +2cr3wQwCfF1qVu4eAVNVfxfy/uEvG3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgG +QAvkknWitpRK8KVLypEj5WKej6CF8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7 +VwIDAQAB +-----END PUBLIC KEY-----">>} + } + }] + } + ]} +]. diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties new file mode 100644 index 0000000000000000000000000000000000000000..cc47df122c431b6880d4282111443f4851b9ae7f --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties @@ -0,0 +1,28 @@ +status = error +dest = err +name = UaaLog + +property.log_pattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] uaa%X{context} - %pid [%t] .... %5p --- %c{1}: %replace{%m}{(?<=password=|client_secret=)([^&]*)}{}%n + +appender.uaaDefaultAppender.type = Console +appender.uaaDefaultAppender.name = UaaDefaultAppender +appender.uaaDefaultAppender.layout.type = PatternLayout +appender.uaaDefaultAppender.layout.pattern = [UAA] ${log_pattern} + +appender.uaaAuditAppender.type = Console +appender.uaaAuditAppender.name = UaaAuditAppender +appender.uaaAuditAppender.layout.type = PatternLayout +appender.uaaAuditAppender.layout.pattern = [UAA_AUDIT] ${log_pattern} + +rootLogger.level = info +rootLogger.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender + +logger.UAAAudit.name = UAA.Audit +logger.UAAAudit.level = info +logger.UAAAudit.additivity = true +logger.UAAAudit.appenderRef.auditEventLog.ref = UaaAuditAppender + +logger.cfIdentity.name = org.cloudfoundry.identity +logger.cfIdentity.level = info +logger.cfIdentity.additivity = false +logger.cfIdentity.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml new file mode 100644 index 0000000000000000000000000000000000000000..ab26e5d0c5a7ab4be4f4cf65032249d750d6035b --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml @@ -0,0 +1,104 @@ +logging: + config: /etc/uaa/log4j2.properties + +issuer: + uri: http://localhost:8080/uaa + +encryption: + active_key_label: CHANGE-THIS-KEY + encryption_keys: + - label: CHANGE-THIS-KEY + passphrase: CHANGEME + +login: + serviceProviderKey: | + -----BEGIN RSA PRIVATE KEY----- + MIICXQIBAAKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5 + L39WqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vA + fpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQAB + AoGAVOj2Yvuigi6wJD99AO2fgF64sYCm/BKkX3dFEw0vxTPIh58kiRP554Xt5ges + 7ZCqL9QpqrChUikO4kJ+nB8Uq2AvaZHbpCEUmbip06IlgdA440o0r0CPo1mgNxGu + lhiWRN43Lruzfh9qKPhleg2dvyFGQxy5Gk6KW/t8IS4x4r0CQQD/dceBA+Ndj3Xp + ubHfxqNz4GTOxndc/AXAowPGpge2zpgIc7f50t8OHhG6XhsfJ0wyQEEvodDhZPYX + kKBnXNHzAkEAyCA76vAwuxqAd3MObhiebniAU3SnPf2u4fdL1EOm92dyFs1JxyyL + gu/DsjPjx6tRtn4YAalxCzmAMXFSb1qHfwJBAM3qx3z0gGKbUEWtPHcP7BNsrnWK + vw6By7VC8bk/ffpaP2yYspS66Le9fzbFwoDzMVVUO/dELVZyBnhqSRHoXQcCQQCe + A2WL8S5o7Vn19rC0GVgu3ZJlUrwiZEVLQdlrticFPXaFrn3Md82ICww3jmURaKHS + N+l4lnMda79eSp3OMmq9AkA0p79BvYsLshUJJnvbk76pCjR28PK4dV1gSDUEqQMB + qy45ptdwJLqLJCeNoR0JUcDNIRhOCuOPND7pcMtX6hI/ + -----END RSA PRIVATE KEY----- + serviceProviderKeyPassword: password + serviceProviderCertificate: | + -----BEGIN CERTIFICATE----- + MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO + MAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO + MAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h + cnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx + CzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM + BgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb + BgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN + ADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W + qS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw + znoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha + MIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc + gBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD + VQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD + VQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh + QGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ + 0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC + KdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK + RpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0= + -----END CERTIFICATE----- + +#The secret that an external login server will use to authenticate to the uaa using the id `login` +LOGIN_SECRET: loginsecret + +oauth: + clients: + rabbit_client: + id: rabbit_client + secret: rabbit_secret + authorized-grant-types: password,implicit + scope: rabbitmq.*,openid + authorities: rabbitmq + redirect-uri: http://localhost:15672/** + +scim: + username_pattern: '[a-z0-9+\-_.@]+' + users: + - rabbit_super|rabbit_super|rabbit_super@example.com|Rabbit|Super|rabbitmq.read:*/*,rabbitmq.write:*/*,rabbitmq.configure:*/*,rabbitmq.tag:administrator + - rabbit_nosuper|rabbit_nosuper|rabbit_nosuper@example.com|Rabbit|Nosuper|rabbitmq.write:uaa_vhost/*,rabbitmq.read:uaa_vhost/some* + +jwt: + token: + policy: + keys: + key-1: + signingKey: | + -----BEGIN RSA PRIVATE KEY----- + MIIEpAIBAAKCAQEA2dP+vRn+Kj+S/oGd49kq6+CKNAduCC1raLfTH7B3qjmZYm45 + yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhKIdcIWadhqDzdtn1hj/22iUwrhH0b + d475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2B9q9KFBmo4Ahh/6+d4wM1rH9kxl0 + RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF2cr3wQwCfF1qVu4eAVNVfxfy/uEv + G3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgGQAvkknWitpRK8KVLypEj5WKej6CF + 8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7VwIDAQABAoIBAFsB5FszYepa11o3 + 4zSPxgv4qyUjuYf3GfoNW0rRGp3nJLtoHAIYa0CcLX9kzsQfmLtxoY46mdppxr8Z + 2qUZpBdRVO7ILNfyXhthdQKI2NuyFDhtYK1p8bx6BXe095HMcvm2ohjXzPdTP4Hq + HrXAYXjUndUbClbjMJ82AnPF8pM70kBq7g733UqkdfrMuv6/d95Jiyw4cC7dGsI3 + Ruz9DGhiAyCBtQ0tUB+6Kqn5DChSB+ccfMJjr6GnCVYmERxEQ5DJCTIX8am8C6KX + mAxUwHMTsEGBU6GzhcUgAwUFEK3I9RptdlRFp7F8E/P0LxmPkFdgaBNUhrdnB7Y4 + 01n1R1kCgYEA/huFJgwVWSBSK/XIouFuQrxZOI9JbBbdmpFT7SBGCdFg26Or9y7j + +N5HE7yuoZ9PkBh17zzosZdsJhGocRYvO0LSq8cXvKXKCwn2fTMM7uJ/oQe68sxG + cF/fC0M/8LvRESWShH920rrERu0s161RuasdOPre0aXu7ZQzkQ68O6MCgYEA23NO + DHKNblBOdFEWsvotLqV8DrIbQ4le7sSgQr56/bdn9GScZk2JU0f+pqzpiGUy9bIt + 6uujvt5ar0IvpIQVdjf3dbp6Fy+Dwhd4yTR4dMdDECest7jL++/21x8Y0ywFhBIK + yEd+QxpOLXP6qaSKTGxL2rnTXRjl8/g629xQPL0CgYEAkNNOh+jLIgjxzGxA9dRV + 62M91qaTyi8eDkJV+wgx4taaxZP7Jt5qwCSvjegz/5m01wOZ88hbNxx+XxQhVJK4 + SKZFO/I07Sfwh2oeOi0maeBdrYGiY09ZtiJuFRU3FBV3irZHU4zyRBh+VY5HyITX + 12JXPWp+JC7WhkG5QiuLzNECgYEA15OBzICLpx6Es4clAVT6JaSzJcyZM9MyyuOl + e2ubbrpJCK/9ZBIvIPzMj/e0wiSH1wzeRrSM+ud7tkcSfk6ytptsIN67KSOoD3b3 + VNCStEU7ABe5eBG1cRzeI52MyYWpNYBzzyNMSacBvWz9hMD6ivCn44pAtGfNHclw + KKNYvxECgYBOamf25md9Jy6rtQsJVEJWw+8sB4lBlKEEadc5qekR7ZQ0hwj8CnTm + WOo856ynI28Sog62iw8F/do/z0B29RuGuxw+prkBkn3lg/VQXEitzqcYvota6osa + 8XSfaPiTyQwWpzbFNZzzemlTsIDiF3UqwkHvWaMYPDf4Ng3cokPPxw== + -----END RSA PRIVATE KEY----- diff --git a/deps/rabbitmq_auth_backend_oauth2/erlang.mk b/deps/rabbitmq_auth_backend_oauth2/erlang.mk index f3be7bfc535e46ead79bbc9acab1880ab823398f..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_auth_backend_oauth2/erlang.mk +++ b/deps/rabbitmq_auth_backend_oauth2/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-493-g40c2b81 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -185,7 +185,7 @@ core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$ core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # We skip files that contain spaces because they end up causing issues. -core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2) | grep -v " ")) +core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) \( -type l -o -type f \) -name $(subst *,\*,$2) | grep -v " ")) core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5306,11 +5374,11 @@ define makedep.erl string:join(DirSubname ++ [atom_to_list(Target)], "/") end end, - ok = file:write_file("$(1)", [ + ok = file:write_file("$(1)", unicode:characters_to_binary([ "# Generated by Erlang.mk. Edit at your own risk!\n\n", [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" - ]), + ])), halt() endef @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl index bc518d367e1e021c686f7d6b20b1d0b9fe6ed2f7..ae4a301b0ad15addc70776e55baa30da91cc8920 100644 --- a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl +++ b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl @@ -47,35 +47,17 @@ description() -> %%-------------------------------------------------------------------- -user_login_authentication(Username0, AuthProps0) -> - AuthProps = to_map(AuthProps0), - Token = token_from_context(AuthProps), - case check_token(Token) of - %% avoid logging the token - {error, _} = E -> E; - {refused, {error, {invalid_token, error, _Err, _Stacktrace}}} -> - {refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid", []}; - {refused, Err} -> - {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; - {ok, DecodedToken} -> - Func = fun() -> - Username = username_from(Username0, DecodedToken), - Tags = tags_from(DecodedToken), - - {ok, #auth_user{username = Username, - tags = Tags, - impl = DecodedToken}} - end, - case with_decoded_token(DecodedToken, Func) of - {error, Err} -> - {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; - Else -> - Else - end +user_login_authentication(Username, AuthProps) -> + case authenticate(Username, AuthProps) of + {refused, Msg, Args} = AuthResult -> + rabbit_log:debug(Msg ++ "~n", Args), + AuthResult; + _ = AuthResult -> + AuthResult end. user_login_authorization(Username, AuthProps) -> - case user_login_authentication(Username, AuthProps) of + case authenticate(Username, AuthProps) of {ok, #auth_user{impl = Impl}} -> {ok, Impl}; Else -> Else end. @@ -125,6 +107,33 @@ update_state(AuthUser, NewToken) -> %%-------------------------------------------------------------------- +authenticate(Username0, AuthProps0) -> + AuthProps = to_map(AuthProps0), + Token = token_from_context(AuthProps), + case check_token(Token) of + %% avoid logging the token + {error, _} = E -> E; + {refused, {error, {invalid_token, error, _Err, _Stacktrace}}} -> + {refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid", []}; + {refused, Err} -> + {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; + {ok, DecodedToken} -> + Func = fun() -> + Username = username_from(Username0, DecodedToken), + Tags = tags_from(DecodedToken), + + {ok, #auth_user{username = Username, + tags = Tags, + impl = DecodedToken}} + end, + case with_decoded_token(DecodedToken, Func) of + {error, Err} -> + {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; + Else -> + Else + end + end. + with_decoded_token(DecodedToken, Fun) -> case validate_token_expiry(DecodedToken) of ok -> Fun(); diff --git a/deps/rabbitmq_auth_mechanism_ssl/erlang.mk b/deps/rabbitmq_auth_mechanism_ssl/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_auth_mechanism_ssl/erlang.mk +++ b/deps/rabbitmq_auth_mechanism_ssl/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk b/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_aws/erlang.mk b/deps/rabbitmq_aws/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_aws/erlang.mk +++ b/deps/rabbitmq_aws/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_aws/rabbitmq-components.mk b/deps/rabbitmq_aws/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_aws/rabbitmq-components.mk +++ b/deps/rabbitmq_aws/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_cli/.travis.yml.patch b/deps/rabbitmq_cli/.travis.yml.patch new file mode 100644 index 0000000000000000000000000000000000000000..9e746813fb4788fd29ff17c9f58613371abe256a --- /dev/null +++ b/deps/rabbitmq_cli/.travis.yml.patch @@ -0,0 +1,69 @@ +--- ../rabbit_common/.travis.yml 2020-03-04 16:15:31.047572000 +0100 ++++ .travis.yml 2020-03-06 08:21:14.068094000 +0100 +@@ -17,45 +17,40 @@ + apt: true + env: + global: +- - secure: Tu26VJ9BsXxL20xxwWk4cbCkZyqyxYmNpSSqco5r3FLeU5hk5Vkk+s2BareRvqKhKHFlvyxu8GwsKtajMvsieP6y5J99gSeub6fDOIskPz61bo0aKA9nbDuBFSG1Z5wgXx1XRo0yDatLxXCXe3FbThRsylG7XNjtRaru1/lwuVxfxPtBGQ1opvQX71sST3GYSPoBYR+JlcVpU+uDHMAzsP8J0m5rEpxcl821aTMk3iz90hBQMsoLTBmSQePPcNqOA/1OH75VfjuXR8JBXHvA9njrUBrsyxgHf2uOh3jAXdIrHZwZg/17+y7gNVqByfx/UpGb8XEpVkncg/cRyVIHMk7/gFCZkeVC1QkIN5+EPiGLF7u32x9QaT7Zqz57iLh3IJzED2dj12qWaeX8QypF1K1r5qq4pRrN6iEZx76stpZbyFT4XnExHRdzPuouy7yz1gDHF0HOxbNLowzc/jk7tuTp+qmDSR5tRvegAIH3TONegxXyB7smdbvdI6MCN5/GP2bGK7HiqYWCmTGHtJwgxBKc5XoV8ZjpXfKxG98WbK5RsSP1miRnmxSbxaV0Gai1hfFlanJFFxTA9584O+NVRXNNFMfnnt20Ts6OwoXTcJ/boIPjF5Mcm0eJ4nz4R18TArXE4B5S4pTk3eQkG1ACDigkYZ3fc6ws4cWrt8BZASI= +- - secure: fNEx9OXi2UisiYu0FiHJpV9+vWLB9DIUAIKG24GfUHVgZqFQOInBf5fEYrjlVgm5zNezSBS3hFNHXd/EXJF8KNgbf6mI0z4h4RyyQY98N+78tWvINoIawEeYpgC6NTI52MdaCfV+fTVWhiL0uP7mqWhLmll2bKXIy6HA6I9PnmiQSloNe64vUPF+UsVZHzzeabK4DR2VdI3h+BGXzOY9FG8Kt2voiXOLd2RFpVeN86FDTp+uVZY/K9e/MsktoK+XaZZ4qMAgm6lB32LVkzl3KA9ki6y6BY7le1m2c90hxAtBJGWZptkMb+VL0Fem39nEBnLjE0a0vIddp32PLJQmv6eopMfLay5BIkwtkRwv3P0uCwYd0bgYQSHF/gdTCcK1nr7fMhkQveBh6vmnbhrca7OeQRHz08+jo6EquUgNQZKmTZPWXQn9lS9mU/0EDLJJhn4KhJezGw6DcAAqB0KqmQedxtHMUT87by7LzhINwKZnm4y5WKA/W/zLI6dNqvIgc5C6UJh0EVgxa13GRmrnGmttV1dtLRQhiMJCbJykaekjPMULUmli0RbFz7bSFqFqEUsF+wwovyD+Y6D8KGOJdvvEYPdPIFpRPnhGUvH86JzsFdVKNJBicGI9LpCtlXlWNRbQIQ8uV5ze2HhxSJhtM6e6dB4d9yzpp6a81uR77bk= +- + # $base_rmq_ref is used by rabbitmq-components.mk to select the + # appropriate branch for dependencies. + - base_rmq_ref=v3.8.x + +-elixir: +- - '1.9' +-otp_release: +- - '21.3' +- - '22.2' ++jobs: ++ include: ++ - elixir: '1.8' ++ otp_release: '21.3' ++ - elixir: '1.10' ++ otp_release: '22.2' + + install: + # This project being an Erlang one (we just set language to Elixir + # to ensure it is installed), we don't want Travis to run mix(1) + # automatically as it will break. +- skip ++ - mix local.rebar --force + + script: + # $current_rmq_ref is also used by rabbitmq-components.mk to select + # the appropriate branch for dependencies. +- - make check-rabbitmq-components.mk ++ - make ++ DEPS_DIR=$PWD/.. + current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" +- - make xref +- current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" ++ - | ++ git clone \ ++ --branch "$base_rmq_ref" \ ++ --depth 1 \ ++ https://github.com/rabbitmq/rabbitmq-server-release.git \ ++ ../rabbitmq_server_release ++ make start-background-broker -C ../rabbitmq_server_release \ ++ DEPS_DIR=$PWD/.. \ ++ PLUGINS='rabbitmq_federation rabbitmq_stomp' \ ++ PROJECT_VERSION=3.9.0 \ ++ current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" + - make tests ++ DEPS_DIR=$PWD/.. + current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" +- +-after_failure: +- - | +- cd "$TRAVIS_BUILD_DIR" +- if test -d logs && test "$AWS_ACCESS_KEY_ID" && test "$AWS_SECRET_ACCESS_KEY"; then +- archive_name="$(basename "$TRAVIS_REPO_SLUG")-$TRAVIS_JOB_NUMBER" +- +- tar -c --transform "s/^logs/${archive_name}/" -f - logs | \ +- xz > "${archive_name}.tar.xz" +- +- aws s3 cp "${archive_name}.tar.xz" s3://server-release-pipeline/travis-ci-logs/ \ +- --region eu-west-1 \ +- --acl public-read +- fi diff --git a/deps/rabbitmq_cli/CONTRIBUTING.md b/deps/rabbitmq_cli/CONTRIBUTING.md index 6a1a7e560e3b065bf270342a119b85863c7ea368..672b29d30526010d8d8993a4a08e659262d2082a 100644 --- a/deps/rabbitmq_cli/CONTRIBUTING.md +++ b/deps/rabbitmq_cli/CONTRIBUTING.md @@ -81,9 +81,19 @@ ask the core team for their opinion on the [RabbitMQ users mailing list][rmq-use Assuming you have: * Installed [Elixir](http://elixir-lang.org/install.html) -* Have a local running RabbitMQ node with the `rabbitmq-federation` plugin enabled (for parameter management testing), e.g. `make run-broker PLUGINS='rabbitmq_federation rabbitmq_stomp'` from a server release repository clone +* Have a local running RabbitMQ node with the `rabbitmq-federation` and `rabbitmq_stomp` plugins enabled, e.g. -...you can simply run `make tests` within this project's root directory. +``` +make run-broker PLUGINS='rabbitmq_federation rabbitmq_stomp' +``` + +from a server release repository clone, use + +``` +make tests +``` + +to run all tests. ### Running a Single Test Case diff --git a/deps/rabbitmq_cli/Makefile b/deps/rabbitmq_cli/Makefile index 14ff1bb07ffdedc32c64be108210b07f9982b599..3188fa11c956f65714aa21af2b933b82b2587ad6 100644 --- a/deps/rabbitmq_cli/Makefile +++ b/deps/rabbitmq_cli/Makefile @@ -68,9 +68,9 @@ escript/rabbitmq-plugins escript/rabbitmq-diagnostics escript/rabbitmq-queues es # the source was previously copied in that directory. ifdef USE_SYMLINKS_IN_ESCRIPTS_DIR -link_escript = ln -s "$(notdir $(1))" "$(2)" +link_escript = ln -sf "$(notdir $(1))" "$(2)" else -link_escript = ln "$(dir $(2))$(notdir $(1))" "$(2)" +link_escript = ln -f "$(dir $(2))$(notdir $(1))" "$(2)" endif app:: $(ESCRIPTS) @@ -119,7 +119,7 @@ test:: $(ESCRIPTS) ifdef TEST_FILE $(gen_verbose) $(MIX_TEST) $(TEST_FILE) else - $(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/close_all_connections_command_test.exs" 1>&2; false + $(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/ctl" 1>&2; false endif dialyzer:: $(ESCRIPTS) @@ -130,10 +130,9 @@ dialyzer:: $(ESCRIPTS) install: $(ESCRIPTS) ifdef PREFIX $(gen_verbose) mkdir -p "$(DESTDIR)$(PREFIX)" - $(verbose) $(foreach script,$(ESCRIPTS), \ - rm -f "$(DESTDIR)$(PREFIX)/$(notdir $(script))";) $(verbose) $(foreach script,$(ACTUAL_ESCRIPTS), \ - cp "$(script)" "$(DESTDIR)$(PREFIX)";) + cmp -s "$(script)" "$(DESTDIR)$(PREFIX)/$(notdir $(script))" || \ + cp "$(script)" "$(DESTDIR)$(PREFIX)/$(notdir $(script))";) $(verbose) $(foreach script,$(LINKED_ESCRIPTS), \ $(call link_escript,$($(notdir $(script))),$(DESTDIR)$(PREFIX)/$(notdir $(script)));) else diff --git a/deps/rabbitmq_cli/README.md b/deps/rabbitmq_cli/README.md index ca7de2fb7f436a1992b8dd1c4c18bfbb881b7279..32d0104b844107907e7ccb220bb9ecbb082af2de 100644 --- a/deps/rabbitmq_cli/README.md +++ b/deps/rabbitmq_cli/README.md @@ -1,5 +1,7 @@ # RabbitMQ CLI Tools +[![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-cli.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-cli) + This repository contains [RabbitMQ CLI tools](https://rabbitmq.com/cli.html) ([rabbitmqctl](https://www.rabbitmq.com/man/rabbitmqctl.1.man.html) and others). diff --git a/deps/rabbitmq_cli/erlang.mk b/deps/rabbitmq_cli/erlang.mk index 7279079b8108aa2256da0f31dbae0e9e97bc452e..c37eaaa0c2c5d1acada68265dbe9ef00cebc4fec 100644 --- a/deps/rabbitmq_cli/erlang.mk +++ b/deps/rabbitmq_cli/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/cover plugins/ct plugins/dialyzer plugins/eunit plugins/proper plugins/triq # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6604,6 +6675,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6650,6 +6722,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7085,3 +7158,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex index 083c87cf39d958140e1071a5e49812cfcd8925f0..1002c4af4b687f7d4d1e4a6513ea3f56439f0d27 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex @@ -100,9 +100,6 @@ defmodule RabbitMQ.CLI.Core.CodePath do {:error, {:unable_to_load_rabbit, :rabbitmq_home_is_undefined}} _ -> - path = Path.join(home, "ebin") - Code.append_path(path) - case Application.load(:rabbit) do :ok -> Code.ensure_loaded(:rabbit_plugins) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex index 0af93de0b40790fc9d49c41df18c540fad9d28fe..3f48fcd8df3f6b18af21808b5ecf7decaed74356 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex @@ -20,6 +20,7 @@ defmodule RabbitMQ.CLI.Core.Config do FormatterBehaviour, PrinterBehaviour } + alias RabbitMQ.CLI.Core.Helpers # # Environment @@ -28,7 +29,7 @@ defmodule RabbitMQ.CLI.Core.Config do def get_option(name, opts \\ %{}) do raw_option = opts[name] || - get_system_option(name) || + get_system_option(name, opts) || default(name) normalise(name, raw_option) @@ -57,30 +58,84 @@ defmodule RabbitMQ.CLI.Core.Config do def normalise(:longnames, _val), do: :shortnames def normalise(_, value), do: value - def system_env_variable(name) do - case name do - :longnames -> "RABBITMQ_USE_LONGNAME" - :rabbitmq_home -> "RABBITMQ_HOME" - :mnesia_dir -> "RABBITMQ_MNESIA_DIR" - :plugins_dir -> "RABBITMQ_PLUGINS_DIR" - :plugins_expand_dir -> "RABBITMQ_PLUGINS_EXPAND_DIR" - :feature_flags_file -> "RABBITMQ_FEATURE_FLAGS_FILE" - :enabled_plugins_file -> "RABBITMQ_ENABLED_PLUGINS_FILE" - :node -> "RABBITMQ_NODENAME" - :aliases_file -> "RABBITMQ_CLI_ALIASES_FILE" - :erlang_cookie -> "RABBITMQ_ERLANG_COOKIE" - _ -> "" - end - end - - def get_system_option(:script_name) do + def get_system_option(:script_name, _) do Path.basename(:escript.script_name()) |> Path.rootname() |> String.to_atom() end - def get_system_option(name) do - System.get_env(system_env_variable(name)) + def get_system_option(:node, _) do + System.get_env("RABBITMQ_NODENAME") + end + + def get_system_option(:aliases_file, _) do + System.get_env("RABBITMQ_CLI_ALIASES_FILE") + end + + def get_system_option(:erlang_cookie, _) do + System.get_env("RABBITMQ_ERLANG_COOKIE") + end + + def get_system_option(name, opts) do + work_offline = opts[:offline] == true + remote_node = case name do + :longnames -> + nil + :rabbitmq_home -> + nil + _ -> + case opts[:node] do + nil -> + # Just in case `opts` was not normalized yet (to get the + # default node), we do it here as well. + case Helpers.normalise_node_option(opts) do + {:error, _} -> nil + {:ok, normalized_opts} -> normalized_opts[:node] + end + node -> + node + end + end + context = get_env_context(remote_node, work_offline) + val0 = get_val_from_env_context(context, name) + val = cond do + remote_node != nil and + val0 == :undefined and + (name == :plugins_dir or name == :enabled_plugins_file) -> + context1 = get_env_context(nil, true) + get_val_from_env_context(context1, name) + true -> + val0 + end + case val do + :undefined -> nil + _ -> val + end + end + + def get_env_context(remote_node, work_offline) do + query_remote = remote_node != nil + case query_remote do + true -> + case work_offline do + true -> :rabbit_env.get_context(:offline) + false -> :rabbit_env.get_context(remote_node) + end + false -> + :rabbit_env.get_context() + end + end + + def get_val_from_env_context(context, name) do + case name do + :longnames -> context[:nodename_type] == :longnames + :rabbitmq_home -> context[:rabbitmq_home] + :mnesia_dir -> context[:mnesia_dir] + :plugins_dir -> context[:plugins_path] + :plugins_expand_dir -> context[:plugins_expand_dir] + :feature_flags_file -> context[:feature_flags_file] + :enabled_plugins_file -> context[:enabled_plugins_file] + end end def default(:script_name), do: :rabbitmqctl diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex index a97dd0e75eef2547e0cf6521c6f04725cc442174..8908bccfdcf4c1777dc8fdb7b39e91dd695b1f66 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex @@ -54,7 +54,7 @@ defmodule RabbitMQ.CLI.Core.DocGuide do Macros.defguide("consumers") Macros.defguide("definitions") Macros.defguide("erlang_versions", path_segment: "which-erlang") - Macros.defguide("feature_flags", domain: "next.rabbitmq.com") + Macros.defguide("feature_flags") Macros.defguide("firehose") Macros.defguide("mirroring", path_segment: "ha") Macros.defguide("logging") @@ -66,7 +66,7 @@ defmodule RabbitMQ.CLI.Core.DocGuide do Macros.defguide("publishers") Macros.defguide("plugins") Macros.defguide("queues") - Macros.defguide("quorum_queues", domain: "next.rabbitmq.com") + Macros.defguide("quorum_queues") Macros.defguide("runtime_tuning", path_segment: "runtime") Macros.defguide("tls", path_segment: "ssl") Macros.defguide("troubleshooting") diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex index 83dfe99c5b05dec6bb0daf2c809a15dde712d680..b140a65b588dadfb38f4cc7fd81d6ef34eb144e0 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex @@ -26,7 +26,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.AwaitStartupCommand do @behaviour RabbitMQ.CLI.CommandBehaviour - @default_timeout 300 + @default_timeout 300_000 def merge_defaults(args, opts) do {args, Map.merge(%{timeout: @default_timeout}, opts)} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex index 2bf578262634861934e36685edacbfe3b24bcfcb..4245b3b2da0cad3e3bff800c9e064da08fb3378b 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex @@ -223,13 +223,24 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do end defp versions_by_node(node, timeout) do - {rmq_vsn, otp_vsn} = case :rabbit_misc.rpc_call( - to_atom(node), :rabbit_misc, :rabbitmq_and_erlang_versions, [], timeout) do - {:badrpc, _} -> {nil, nil} - pair -> pair + {rmq_name, rmq_vsn, otp_vsn} = case :rabbit_misc.rpc_call( + to_atom(node), :rabbit, :product_info, [], timeout) do + {:badrpc, _} -> + {nil, nil, nil} + map -> + %{:otp_release => otp} = map + name = case map do + %{:product_name => v} -> v + %{:product_base_name => v} -> v + end + vsn = case map do + %{:product_version => v} -> v + %{:product_base_version => v} -> v + end + {name, vsn, otp} end - {node, %{rabbitmq_version: to_string(rmq_vsn), erlang_version: to_string(otp_vsn)}} + {node, %{rabbitmq_name: to_string(rmq_name), rabbitmq_version: to_string(rmq_vsn), erlang_version: to_string(otp_vsn)}} end defp node_lines(nodes) do @@ -237,8 +248,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do end defp version_lines(mapping) do - Enum.map(mapping, fn {node, %{rabbitmq_version: rmq_vsn, erlang_version: otp_vsn}} -> - "#{node}: RabbitMQ #{rmq_vsn} on Erlang #{otp_vsn}" + Enum.map(mapping, fn {node, %{rabbitmq_name: rmq_name, rabbitmq_version: rmq_vsn, erlang_version: otp_vsn}} -> + "#{node}: #{rmq_name} #{rmq_vsn} on Erlang #{otp_vsn}" end) end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex index f8128e034e69d5bdfad369badb5fe987bee373b7..a7bfaf81c47fb5244d179e467a1da6309ad8a333 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex @@ -32,19 +32,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.DecodeCommand do def distribution(_), do: :none def merge_defaults(args, opts) do - {args, - Map.merge( - %{ + with_defaults = Map.merge(%{ cipher: :rabbit_pbe.default_cipher(), hash: :rabbit_pbe.default_hash(), iterations: :rabbit_pbe.default_iterations() - }, - opts - )} + }, opts) + {args, with_defaults} end def validate(args, _) when length(args) < 2 do - {:validation_failure, {:bad_argument, "Please provide a value to decode and a passphrase"}} + {:validation_failure, {:not_enough_args, "Please provide a value to decode and a passphrase"}} end def validate(args, _) when length(args) > 2 do @@ -75,8 +72,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.DecodeCommand do term_to_decrypt = case term_value do - {:encrypted, encrypted_term} -> encrypted_term - _ -> term_value + {:encrypted, _} = encrypted -> + encrypted + _ -> + {:encrypted, term_value} end result = :rabbit_pbe.decrypt_term(cipher, hash, iterations, passphrase, term_to_decrypt) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex index 7fa7fb130c8719a0375c42857261ddd951994921..f5482e542e2dd87a7d1ca3401a89ddb54d7090a0 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex @@ -30,19 +30,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EncodeCommand do def distribution(_), do: :none def merge_defaults(args, opts) do - {args, - Map.merge( - %{ + with_defaults = Map.merge(%{ cipher: :rabbit_pbe.default_cipher(), hash: :rabbit_pbe.default_hash(), iterations: :rabbit_pbe.default_iterations() - }, - opts - )} + }, opts) + {args, with_defaults} end def validate(args, _) when length(args) < 2 do - {:validation_failure, {:bad_argument, "Please provide a value to decode and a passphrase."}} + {:validation_failure, {:not_enough_args, "Please provide a value to decode and a passphrase."}} end def validate(args, _) when length(args) > 2 do @@ -68,8 +65,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EncodeCommand do def run([value, passphrase], %{cipher: cipher, hash: hash, iterations: iterations}) do try do term_value = Helpers.evaluate_input_as_term(value) - result = :rabbit_pbe.encrypt_term(cipher, hash, iterations, passphrase, term_value) - {:ok, {:encrypted, result}} + result = {:encrypted, _} = :rabbit_pbe.encrypt_term(cipher, hash, iterations, passphrase, term_value) + {:ok, result} catch _, _ -> {:error, "Error during cipher operation."} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex index 7c327e796f43e7afdc1297267c9323e42d402457..cea52793e699143af2ffcfc057a64b4ba49fabb0 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex @@ -23,7 +23,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.HelpCommand do @behaviour RabbitMQ.CLI.CommandBehaviour - def scopes(), do: [:ctl, :diagnostics, :plugins, :queues] + def scopes(), do: [:ctl, :diagnostics, :plugins, :queues, :upgrade] def switches(), do: [list_commands: :boolean] def distribution(_), do: :none diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex index 49470dce6d17835e202964c98ce17b66fa0283e0..b8c47e0f18db91c61cccc92e88abab93829aa547 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex @@ -29,7 +29,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do ListQueuesCommand, StatusCommand } - alias RabbitMQ.CLI.Diagnostics.Commands.CommandLineArgumentsCommand + alias RabbitMQ.CLI.Diagnostics.Commands.{ + CommandLineArgumentsCommand, + OsEnvCommand + } @behaviour RabbitMQ.CLI.CommandBehaviour @@ -63,7 +66,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do run_command(EnvironmentCommand, [], opts), run_command(ListConnectionsCommand, info_keys(ListConnectionsCommand), opts), run_command(ListChannelsCommand, info_keys(ListChannelsCommand), opts), - run_command(CommandLineArgumentsCommand, [], opts) + run_command(CommandLineArgumentsCommand, [], opts), + run_command(OsEnvCommand, [], opts) ] vhost_data = @@ -78,7 +82,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do run_command(ListPermissionsCommand, [], opts), run_command(ListPoliciesCommand, [], opts), run_command(ListGlobalParametersCommand, [], opts), - run_command(ListParametersCommand, [], opts) + run_command(ListParametersCommand, [], opts), + ] end) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex index f990583b9f27cce7a2df6886c8eea5c420d5c021..4f11e9a3e0bb21cee2e439fb34cb399731bb0f39 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex @@ -76,12 +76,29 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do def output(result, %{node: node_name, unit: unit}) when is_list(result) do m = result_map(result) + product_name_section = case m do + %{:product_name => product_name} when product_name != "" -> + ["Product name: #{product_name}"] + _ -> + [] + end + product_version_section = case m do + %{:product_version => product_version} when product_version != "" -> + ["Product version: #{product_version}"] + _ -> + [] + end + runtime_section = [ "#{bright("Runtime")}\n", "OS PID: #{m[:pid]}", "OS: #{m[:os]}", # TODO: format "Uptime (seconds): #{m[:uptime]}", + ] ++ + product_name_section ++ + product_version_section ++ + [ "RabbitMQ version: #{m[:rabbitmq_version]}", "Node name: #{node_name}", "Erlang configuration: #{m[:erlang_version]}", @@ -194,6 +211,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do %{ os: os_name(Keyword.get(result, :os)), pid: Keyword.get(result, :pid), + product_name: Keyword.get(result, :product_name) |> to_string, + product_version: Keyword.get(result, :product_version) |> to_string, rabbitmq_version: Keyword.get(result, :rabbitmq_version) |> to_string, erlang_version: Keyword.get(result, :erlang_version) |> to_string |> String.trim_trailing, uptime: Keyword.get(result, :uptime), diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex index c914a664b0add5f062fa68dfb0821e48f7302c04..a348a7ed285a6f55e35b7b6f51593700c11bf489 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex @@ -39,9 +39,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StopCommand do end def run([pidfile_path], %{node: node_name}) do + ret = OsPid.read_pid_from_file(pidfile_path, true) :rabbit_misc.rpc_call(node_name, :rabbit, :stop_and_halt, []) - case OsPid.read_pid_from_file(pidfile_path, true) do + case ret do {:error, details} -> {:error, "could not read pid from file #{pidfile_path}. Error: #{details}"} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex index 754fa2d980beda63b1d48b7f84d84563e1259ca8..12283270bb5a15fca6d0aa75ded62179ce275b41 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex @@ -55,7 +55,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do Helpers.stream_until_error_parameterised( [ log("Waiting for pid file '#{pid_file}' to appear", quiet), - fn _ -> wait_for_pid_file(pid_file, timeout) end, + fn _ -> wait_for_pid_file(pid_file, node_name, timeout) end, log_param(fn pid -> "pid is #{pid}" end, quiet) ] ++ wait_for_pid_funs(node_name, app_names, timeout, quiet), @@ -73,9 +73,9 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do ) end - def output({:error, err}, _opts) do + def output({:error, err}, opts) do case format_error(err) do - :undefined -> RabbitMQ.CLI.DefaultOutput.output({:error, err}) + :undefined -> RabbitMQ.CLI.DefaultOutput.output({:error, err}, opts) error_str -> {:error, RabbitMQ.CLI.Core.ExitCodes.exit_software(), error_str} end end @@ -249,7 +249,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do :rabbit_misc.is_os_process_alive(to_charlist(pid)) end - defp wait_for_pid_file(pid_file, timeout) do + defp wait_for_pid_file(pid_file, node_name, timeout) do wait_for( timeout, fn -> @@ -259,8 +259,11 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do :error -> {:error, {:garbage_in_pid_file, pid_file}} - {int, _} -> - {:ok, int} + {pid, _} -> + case check_distribution(pid, node_name) do + :ok -> {:ok, pid} + _ -> {:error, :loop} + end end {:error, :enoent} -> diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex index df040bfc64736d80f8d6f38f38fec3bd27fc4f0b..e0bc2dca3e2a9d0264bf3c8d5cd4bfce1e1b032d 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex @@ -16,19 +16,17 @@ alias RabbitMQ.CLI.Formatters.FormatterHelpers defmodule RabbitMQ.CLI.DefaultOutput do # When `use RabbitMQ.CLI.DefaultOutput` is invoked, - # this will define output/2 that delegates to RabbitMQ.CLI.DefaultOutput.output/3. + # this will define output/2 that delegates to RabbitMQ.CLI.DefaultOutput.output/2. defmacro __using__(_) do quote do - def output(result, _opts) do - RabbitMQ.CLI.DefaultOutput.output(result) + def output(result, opts) do + RabbitMQ.CLI.DefaultOutput.output(result, opts) end end end - def output(result) do - result - |> normalize_output() - |> format_output() + def output(result, opts \\ %{}) do + format_output(normalize_output(result, opts)) end def mnesia_running_error(node_name) do @@ -36,30 +34,37 @@ defmodule RabbitMQ.CLI.DefaultOutput do "Please stop RabbitMQ with 'rabbitmqctl stop_app' first." end - defp normalize_output(:ok), do: :ok - defp normalize_output({:ok, _} = input), do: input - defp normalize_output({:stream, _} = input), do: input - defp normalize_output({:badrpc_multi, _, _} = input), do: {:error, input} - defp normalize_output({:badrpc, :nodedown} = input), do: {:error, input} - defp normalize_output({:badrpc, :timeout} = input), do: {:error, input} - defp normalize_output({:badrpc, {:timeout, _n}} = input), do: {:error, input} - defp normalize_output({:badrpc, {:timeout, _n, _msg}} = input), do: {:error, input} - defp normalize_output({:badrpc, {:EXIT, reason}}), do: {:error, reason} - defp normalize_output({:error, exit_code, string}) when is_integer(exit_code) do + defp normalize_output(:ok, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name}} + end + defp normalize_output(:ok, _opts), do: :ok + defp normalize_output({:ok, value}, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "value" => value}} + end + defp normalize_output({:ok, _} = input, _opts), do: input + defp normalize_output({:stream, _} = input, _opts), do: input + defp normalize_output({:badrpc_multi, _, _} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, :nodedown} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, :timeout} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:timeout, _n}} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:timeout, _n, _msg}} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:EXIT, reason}}, _opts), do: {:error, reason} + defp normalize_output({:error, exit_code, string}, _opts) when is_integer(exit_code) do {:error, exit_code, to_string(string)} end - defp normalize_output({:error, format, args}) + defp normalize_output({:error, format, args}, _opts) when (is_list(format) or is_binary(format)) and is_list(args) do {:error, to_string(:rabbit_misc.format(format, args))} end - defp normalize_output({:error, _} = input), do: input - defp normalize_output({:error_string, string}) do + defp normalize_output({:error, _} = input, _opts), do: input + defp normalize_output({:error_string, string}, _opts) do {:error, to_string(string)} end - defp normalize_output(unknown) when is_atom(unknown), do: {:error, unknown} - defp normalize_output({unknown, _} = input) when is_atom(unknown), do: {:error, input} - defp normalize_output(result) when not is_atom(result), do: {:ok, result} + defp normalize_output(unknown, _opts) when is_atom(unknown), do: {:error, unknown} + defp normalize_output({unknown, _} = input, _opts) when is_atom(unknown), do: {:error, input} + defp normalize_output(result, _opts) when not is_atom(result), do: {:ok, result} + defp format_output({:error, _} = result) do result end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex new file mode 100644 index 0000000000000000000000000000000000000000..2d2b841a0d7832ae18248c80017e12f7fec2a9e0 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex @@ -0,0 +1,76 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Diagnostics.Commands.OsEnvCommand do + @moduledoc """ + Lists RabbitMQ-specific environment variables defined on target node + """ + + import RabbitMQ.CLI.Core.Platform, only: [line_separator: 0] + + @behaviour RabbitMQ.CLI.CommandBehaviour + + def scopes(), do: [:diagnostics] + + use RabbitMQ.CLI.Core.AcceptsDefaultSwitchesAndTimeout + use RabbitMQ.CLI.Core.MergesNoDefaults + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + + def run([], %{node: node_name, timeout: timeout}) do + case :rabbit_misc.rpc_call(node_name, :rabbit_env, :get_used_env_vars, [], timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + xs when is_list(xs) -> + # convert keys and values to binaries (Elixir strings) + xs + |> Enum.map(fn {k, v} -> {:rabbit_data_coercion.to_binary(k), :rabbit_data_coercion.to_binary(v)} end) + |> :maps.from_list + other -> other + end + end + + def output([], %{formatter: fmt}) when fmt == "csv" or fmt == "erlang" do + {:ok, []} + end + def output([], %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "variables" => []}} + end + def output([], %{node: node_name}) do + {:ok, "Node #{node_name} reported no relevant environment variables."} + end + def output(vars, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "variables" => vars}} + end + def output(vars, %{formatter: "csv"}) do + {:stream, [Enum.map(vars, fn({k, v}) -> [variable: k, value: v] end)]} + end + def output(vars, _opts) do + lines = Enum.map(vars, fn({k, v}) -> "#{k}=#{v}" end) |> Enum.join(line_separator()) + {:ok, lines} + end + + def usage() do + "os_env" + end + + def help_section(), do: :observability_and_health_checks + + def description(), do: "Lists RabbitMQ-specific environment variables set on target node" + + def banner(_, %{node: node_name}) do + "Listing RabbitMQ-specific environment variables defined on node #{node_name}..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex new file mode 100644 index 0000000000000000000000000000000000000000..c66baa0bed8ce5a4a3bdd94848047710e0590237 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex @@ -0,0 +1,74 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineQuorumPlusOneCommand do + alias RabbitMQ.CLI.Core.DocGuide + + @behaviour RabbitMQ.CLI.CommandBehaviour + + @default_timeout 120_000 + + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + + def merge_defaults(args, opts) do + timeout = + case opts[:timeout] do + nil -> @default_timeout + :infinity -> @default_timeout + val -> val + end + + {args, Map.put(opts, :timeout, timeout)} + end + + + def run([], %{node: node_name, timeout: timeout}) do + rpc_timeout = timeout + 500 + case :rabbit_misc.rpc_call(node_name, :rabbit_upgrade_preparation, :await_online_quorum_plus_one, [timeout], rpc_timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + {:badrpc, _} = err -> err + + true -> :ok + false -> {:error, "time is up, no quorum + 1 online replicas came online for at least some quorum queues"} + end + end + + def output({:error, msg}, %{node: node_name, formatter: "json"}) do + {:error, %{"result" => "error", "node" => node_name, "message" => msg}} + end + use RabbitMQ.CLI.DefaultOutput + + def usage, do: "await_online_quorum_plus_one" + + def usage_doc_guides() do + [ + DocGuide.quorum_queues(), + DocGuide.upgrade() + ] + end + + def help_section, do: :upgrade + + def description() do + "Waits for all quorum queues to have an above minimum online quorum. " <> + "This makes sure that no queues would lose their quorum if the target node is shut down" + end + + def banner([], %{timeout: timeout}) do + "Will wait for a quorum + 1 of nodes to be online for all quorum queues for #{round(timeout/1000)} seconds..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex new file mode 100644 index 0000000000000000000000000000000000000000..79482690ad705d51c92f7fba61efdf587db76e6a --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex @@ -0,0 +1,74 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineSynchronizedMirrorCommand do + alias RabbitMQ.CLI.Core.DocGuide + + @behaviour RabbitMQ.CLI.CommandBehaviour + + @default_timeout 120_000 + + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + + def merge_defaults(args, opts) do + timeout = + case opts[:timeout] do + nil -> @default_timeout + :infinity -> @default_timeout + val -> val + end + + {args, Map.put(opts, :timeout, timeout)} + end + + + def run([], %{node: node_name, timeout: timeout}) do + rpc_timeout = timeout + 500 + case :rabbit_misc.rpc_call(node_name, :rabbit_upgrade_preparation, :await_online_synchronised_mirrors, [timeout], rpc_timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + {:badrpc, _} = err -> err + + true -> :ok + false -> {:error, "time is up, no synchronised mirror came online for at least some classic mirrored queues"} + end + end + + def output({:error, msg}, %{node: node_name, formatter: "json"}) do + {:error, %{"result" => "error", "node" => node_name, "message" => msg}} + end + use RabbitMQ.CLI.DefaultOutput + + def usage, do: "await_online_synchronized_mirror" + + def usage_doc_guides() do + [ + DocGuide.mirroring(), + DocGuide.upgrade() + ] + end + + def help_section, do: :upgrade + + def description() do + "Waits for all classic mirrored queues hosted on the target node to have at least one synchronized mirror online. " <> + "This makes sure that if target node is shut down, there will be an up-to-date mirror to promote." + end + + def banner([], %{timeout: timeout}) do + "Will wait for a synchronised mirror be online for all classic mirrored queues for #{round(timeout/1000)} seconds..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmqctl.ex b/deps/rabbitmq_cli/lib/rabbitmqctl.ex index 7ef55e859a2168700f971e707fb37c2a63f8d35a..05ba5a8d4ec16e03dbd98258c199688d82f76ad8 100644 --- a/deps/rabbitmq_cli/lib/rabbitmqctl.ex +++ b/deps/rabbitmq_cli/lib/rabbitmqctl.ex @@ -477,9 +477,14 @@ defmodule RabbitMQCtl do op = CommandModules.module_to_command(module) {:error, ExitCodes.exit_code_for(result), - "Error: operation #{op} on node #{opts[:node]} timed out. Timeout value used: #{ - opts[:timeout] - }"} + "Error: operation #{op} on node #{opts[:node]} timed out. Timeout value used: #{opts[:timeout]}"} + end + + defp format_error({:error, :timeout, msg}, opts, module) do + op = CommandModules.module_to_command(module) + + {:error, ExitCodes.exit_code_for(:timeout), + "Error: operation #{op} on node #{opts[:node]} timed out: #{msg}. Timeout value used: #{opts[:timeout]}"} end # Plugins @@ -536,6 +541,15 @@ defmodule RabbitMQCtl do end # Catch all clauses + defp format_error({:error, err}, %{formatter: "json"}, _) when is_map(err) do + {:ok, res} = JSON.encode(err) + {:error, ExitCodes.exit_unavailable(), res} + end + defp format_error({:error, exit_code, err}, %{formatter: "json"}, _) when is_map(err) do + {:ok, res} = JSON.encode(err) + {:error, exit_code, res} + end + defp format_error({:error, exit_code, err}, _, _) do string_err = Helpers.string_or_inspect(err) diff --git a/deps/rabbitmq_cli/mix.exs b/deps/rabbitmq_cli/mix.exs index 81d5b5453e8ccfb7cefd20a3e07fa802ea3778f0..1321e19dd92f96b1b7063597c9b8f4fac6ee4692 100644 --- a/deps/rabbitmq_cli/mix.exs +++ b/deps/rabbitmq_cli/mix.exs @@ -20,7 +20,7 @@ defmodule RabbitMQCtl.MixfileBase do [ app: :rabbitmqctl, version: "3.8.0-dev", - elixir: ">= 1.7.0 and < 1.11.0", + elixir: ">= 1.8.0 and < 1.11.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, escript: [main_module: RabbitMQCtl, @@ -136,6 +136,18 @@ defmodule RabbitMQCtl.MixfileBase do compile: false, override: true }, + { + :goldrush, + path: Path.join(deps_dir, "goldrush"), + compile: false, + override: true + }, + { + :lager, + path: Path.join(deps_dir, "lager"), + compile: false, + override: true + }, { :amqp_client, path: Path.join(deps_dir, "amqp_client"), diff --git a/deps/rabbitmq_cli/rabbitmq-components.mk b/deps/rabbitmq_cli/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_cli/rabbitmq-components.mk +++ b/deps/rabbitmq_cli/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_consistent_hash_exchange/erlang.mk b/deps/rabbitmq_consistent_hash_exchange/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_consistent_hash_exchange/erlang.mk +++ b/deps/rabbitmq_consistent_hash_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk b/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_event_exchange/erlang.mk b/deps/rabbitmq_event_exchange/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_event_exchange/erlang.mk +++ b/deps/rabbitmq_event_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_event_exchange/rabbitmq-components.mk b/deps/rabbitmq_event_exchange/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_event_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_event_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_federation/README.md b/deps/rabbitmq_federation/README.md index b779d810941967d1eea082a16f1d762f5f49af52..efebf43d3aa33ece3f6c2be9994ad13385549b29 100644 --- a/deps/rabbitmq_federation/README.md +++ b/deps/rabbitmq_federation/README.md @@ -1,5 +1,7 @@ ## RabbitMQ Federation +[![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-federation.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-federation) + RabbitMQ federation offers a group of features for loosely coupled and WAN-friendly distributed RabbitMQ setups. Note that this is not an alternative to queue mirroring. @@ -11,7 +13,7 @@ This plugin ships with RabbitMQ, there is no need to install it separately. -## Documentation +## Documentation See [RabbitMQ federation plugin](https://www.rabbitmq.com/federation.html) on rabbitmq.com. @@ -20,4 +22,4 @@ See [RabbitMQ federation plugin](https://www.rabbitmq.com/federation.html) on ra Released under [the same license as RabbitMQ](https://www.rabbitmq.com/mpl.html). -2007-2015 (c) Pivotal Software Inc. +2007-2015 (c) 2007-2020 VMware, Inc. or its affiliates. diff --git a/deps/rabbitmq_federation/erlang.mk b/deps/rabbitmq_federation/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_federation/erlang.mk +++ b/deps/rabbitmq_federation/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_federation/include/rabbit_federation.hrl b/deps/rabbitmq_federation/include/rabbit_federation.hrl index 2c0c79359ba4c27b935c2cc8b81d96f3ede504f2..9efa4855a3a306a702958923fe9630276ec7ad38 100644 --- a/deps/rabbitmq_federation/include/rabbit_federation.hrl +++ b/deps/rabbitmq_federation/include/rabbit_federation.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -record(upstream, {uris, @@ -27,7 +27,8 @@ ack_mode, ha_policy, name, - bind_nowait}). + bind_nowait, + resource_cleanup_mode}). -record(upstream_params, {uri, diff --git a/deps/rabbitmq_federation/rabbitmq-components.mk b/deps/rabbitmq_federation/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_federation/rabbitmq-components.mk +++ b/deps/rabbitmq_federation/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl index 1cf6023cffe4d4620e24526937aba04cc0ae5d99..2424616990bf06fd7203763b21d93ddfc75768c5 100644 --- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl +++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module('Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand'). diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl index 7ba372e3625fe2de2d828f96f580de0475206099..6af27e823a0a393aa2e6e45980e86da5e6c5416d 100644 --- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl +++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module('Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand'). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_app.erl b/deps/rabbitmq_federation/src/rabbit_federation_app.erl index bb09c09a35a84a9a6dd8d35bdabbdede3e852bc3..704e217b2ac9e3580888e64b478767520b06a253 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_app.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_app.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_app). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_db.erl b/deps/rabbitmq_federation/src/rabbit_federation_db.erl index 37bfcda467215fcb5a5bf23ade46f1de6506e14a..afdcc1bc0e1d17c387883e3783ec59f45b585960 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_db.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_db.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_db). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_event.erl b/deps/rabbitmq_federation/src/rabbit_federation_event.erl index adf52cd3c31eb55813fd1545bae576684fb345d3..74770200177dde3b797fd5f39cb6d30761c6ea87 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_event.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_event.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_event). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl index efc866a77e34b29b30092e81d19fb980283f4c39..57fff55c7d28e3b31aaf5bee5f2e73de1d7e42cd 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% TODO rename this diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl index e71c9ae2bb2b05a76f26b1be35f75d12b1ae8248..1dab14792aaf5ca863e621eb8653556aac4d6d82 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_exchange_link). @@ -199,7 +199,6 @@ handle_info(Msg, State) -> terminate(_Reason, {not_started, _}) -> ok; - terminate(Reason, #state{downstream_connection = DConn, connection = Conn, upstream = Upstream, @@ -207,15 +206,39 @@ terminate(Reason, #state{downstream_connection = DConn, downstream_exchange = XName, internal_exchange_timer = TRef, internal_exchange = IntExchange, - queue = Queue}) -> + queue = Queue}) when Reason =:= shutdown; + Reason =:= {shutdown, restart}; + Reason =:= gone -> + timer:cancel(TRef), + rabbit_federation_link_util:ensure_connection_closed(DConn), + + rabbit_log:debug("Exchange federation: link is shutting down, resource cleanup mode: ~p", [Upstream#upstream.resource_cleanup_mode]), + case Upstream#upstream.resource_cleanup_mode of + never -> ok; + _ -> + %% This is a normal shutdown and we are allowed to clean up the internally used queue and exchange + rabbit_log:debug("Federated exchange '~s' link will delete its internal queue '~s'", [Upstream#upstream.exchange_name, Queue]), + delete_upstream_queue(Conn, Queue), + rabbit_log:debug("Federated exchange '~s' link will delete its upstream exchange", [Upstream#upstream.exchange_name]), + delete_upstream_exchange(Conn, IntExchange) + end, + + rabbit_federation_link_util:ensure_connection_closed(Conn), + rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, XName), + ok; +%% unexpected shutdown +terminate(Reason, #state{downstream_connection = DConn, + connection = Conn, + upstream = Upstream, + upstream_params = UParams, + downstream_exchange = XName, + internal_exchange_timer = TRef}) -> timer:cancel(TRef), - %% Terminate the direct connection rabbit_federation_link_util:ensure_connection_closed(DConn), - %% Cleanup of internal queue and exchange - delete_upstream_queue(Conn, Queue), - delete_upstream_exchange(Conn, IntExchange), + %% unlike in the clean shutdown case above, we keep the queue + %% and exchange around rabbit_federation_link_util:ensure_connection_closed(Conn), rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, XName), diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl index 09eb79071557f7e95c960c286a458d9067311fa0..e5748f676917c55392ed761a568d77ea566e8779 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_exchange_link_sup_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl index 625d70d82183fbb715f7194c71ca777129268d93..5535823c66125acdd58435554538c6284f641b76 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_link_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl index 6570c2dd8bdcd73a4ed41b87990b9fd61462190c..885772abf334412e0c0a58a8192e15810b4287cf 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_link_util). @@ -267,6 +267,9 @@ handle_upstream_down(Reason, _Args, State) -> %%---------------------------------------------------------------------------- +log_terminate(gone, _Upstream, _UParams, _XorQName) -> + %% the link cannot start, this has been logged already + ok; log_terminate({shutdown, restart}, _Upstream, _UParams, _XorQName) -> %% We've already logged this before munging the reason ok; diff --git a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl index dc655ab58de215dccef9a16f3ba522a3f8140a3b..de732729b5e9d29405aec0edc7936317216092da 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_parameters). @@ -96,6 +96,7 @@ shared_validation() -> {<<"trust-user-id">>, fun rabbit_parameter_validation:boolean/2, optional}, {<<"ack-mode">>, rabbit_parameter_validation:enum( ['no-ack', 'on-publish', 'on-confirm']), optional}, + {<<"resource-cleanup-mode">>, rabbit_parameter_validation:enum(['default', 'never']), optional}, {<<"ha-policy">>, fun rabbit_parameter_validation:binary/2, optional}, {<<"bind-nowait">>, fun rabbit_parameter_validation:boolean/2, optional}]. diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl index f3659f027c6e60bef9c0f51954063a035492e224..a9605efe7dcc4c31e83dec51500e71f238447857 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl index 70b5d18527f40265f93afe1117451d266d25541c..9fde78be18e0050a7957d08da685d203c49fb86d 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue_link). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl index 2bef357cd9400b0e33cbd94ec750e43b591d96c9..835e4db17a26b235f79305a8d459de725d7acea7 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue_link_sup_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_status.erl b/deps/rabbitmq_federation/src/rabbit_federation_status.erl index a57a129fc87195b200720070262481354ffe72fb..c42271c79fa4cd89ae4e9e96aeebe88cf8b4ade8 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_status.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_status.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_status). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl index f4319bcc04236227f34940bc47fb73c588b20f70..0fddf05487fb26a8200d5bb4a0099b5a70a1ee2e 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl index 6145a834d45fa0a0a52238db3facb9a43b3ef444..f6918723a890cdf2a94e9d176cd0f903b2d01b38 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_upstream). @@ -26,6 +26,7 @@ -import(rabbit_misc, [pget/2, pget/3]). -import(rabbit_federation_util, [name/1, vhost/1, r/1]). +-import(rabbit_data_coercion, [to_atom/1]). %%---------------------------------------------------------------------------- @@ -143,12 +144,11 @@ from_upstream_or_set(US, Name, U, XorQ) -> expires = bget(expires, US, U, none), message_ttl = bget('message-ttl', US, U, none), trust_user_id = bget('trust-user-id', US, U, false), - ack_mode = list_to_atom( - binary_to_list( - bget('ack-mode', US, U, <<"on-confirm">>))), + ack_mode = to_atom(bget('ack-mode', US, U, <<"on-confirm">>)), ha_policy = bget('ha-policy', US, U, none), name = Name, - bind_nowait = bget('bind-nowait', US, U, false)}. + bind_nowait = bget('bind-nowait', US, U, false), + resource_cleanup_mode = to_atom(bget('resource-cleanup-mode', US, U, <<"default">>))}. %%---------------------------------------------------------------------------- diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl index b126f119a91f04ce917909c4bc89ee7c26626afa..65b948b7de44177c702ce7a2e48c0aab2bd9a42d 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_upstream_exchange). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_util.erl index b8d563d8f95c07ce42fd8187c8a98cacd4af3d24..0e73d06c2d2ff303441b148e557964c0fc5c8aad 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_util.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_util.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_util). diff --git a/deps/rabbitmq_federation_management/erlang.mk b/deps/rabbitmq_federation_management/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_federation_management/erlang.mk +++ b/deps/rabbitmq_federation_management/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_federation_management/rabbitmq-components.mk b/deps/rabbitmq_federation_management/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_federation_management/rabbitmq-components.mk +++ b/deps/rabbitmq_federation_management/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_jms_topic_exchange/erlang.mk b/deps/rabbitmq_jms_topic_exchange/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_jms_topic_exchange/erlang.mk +++ b/deps/rabbitmq_jms_topic_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk b/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_management/bin/rabbitmqadmin b/deps/rabbitmq_management/bin/rabbitmqadmin index 3b76e5856bc7f6be74c1c2c504ab7340c49b918c..a4e0b54ed745b68403588fc611381ff2e96c13d7 100755 --- a/deps/rabbitmq_management/bin/rabbitmqadmin +++ b/deps/rabbitmq_management/bin/rabbitmqadmin @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # The contents of this file are subject to the Mozilla Public License # Version 1.1 (the "License"); you may not use this file except in @@ -20,6 +20,7 @@ from __future__ import print_function from optparse import OptionParser, TitledHelpFormatter import base64 +import copy import json import os import socket @@ -165,8 +166,8 @@ DECLARABLE = { DELETABLE = { 'exchange': {'mandatory': ['name']}, 'queue': {'mandatory': ['name']}, - 'binding': {'mandatory': ['source', 'destination_type', 'destination'], - 'optional': {'properties_key': '~'}}, + 'binding': {'mandatory': ['source', 'destination_type', 'destination'], + 'optional': {'properties_key': '~'}}, 'vhost': {'mandatory': ['name']}, 'user': {'mandatory': ['name']}, 'permission': {'mandatory': ['vhost', 'user']}, @@ -331,6 +332,8 @@ def fmt_usage_stanza(root, verb): default_options = {"hostname": "localhost", "port": "15672", + # default config file section name + "node": "default", "path_prefix": "", "declare_vhost": "/", "username": "guest", @@ -429,56 +432,72 @@ def default_config(): def make_configuration(): make_parser() - (options, args) = parser.parse_args() - setattr(options, "declare_vhost", None) - if options.version: + (cli_options, args) = parser.parse_args() + + if cli_options.version: print_version() - if options.config is None: + + setattr(cli_options, "declare_vhost", None) + final_options = copy.copy(cli_options) + + # Resolve config file path + if cli_options.config is None: config_file = default_config() if config_file is not None: - setattr(options, "config", config_file) - else: - if not os.path.isfile(options.config): - assert_usage(False, "Could not read config file '%s'" % options.config) - - if options.node is None and options.config: - options.node = "default" + setattr(final_options, "config", config_file) else: - options.node = options.node - for (key, val) in default_options.items(): - if getattr(options, key) is None: - setattr(options, key, val) - - if options.config is not None: - config = ConfigParser() + if not os.path.isfile(cli_options.config): + assert_usage(False, "Could not read config file '%s'" % cli_options.config) + + final_options = merge_default_options(cli_options, final_options) + final_options = merge_config_file_options(cli_options, final_options) + final_options = expand_base_uri_options(cli_options, final_options) + + return (final_options, args) + +def merge_default_options(cli_options, final_options): + for (key, default_val) in default_options.items(): + if getattr(cli_options, key) is None: + setattr(final_options, key, default_val) + return final_options + +def merge_config_file_options(cli_options, final_options): + # Parse config file and load it, making sure that CLI flags + # take precedence + if final_options.config is not None: + config_parser = ConfigParser() try: - config.read(options.config) - new_conf = dict(config.items(options.node)) + config_parser.read(final_options.config) + section_settings = dict(config_parser.items(final_options.node)) except NoSectionError as error: - if options.node == "default": + # Report if an explicitly provided section (node) does not exist in the file + if final_options.node == "default": pass else: - msg = "Could not read section '%s' in config file '%s':\n %s" % (options.node, options.config, error) + msg = "Could not read section '%s' in config file '%s':\n %s" % (final_options.node, final_options.config, error) assert_usage(False, msg) else: - for key, val in new_conf.items(): + for key, section_val in section_settings.items(): + # special case --ssl if key == 'ssl': - setattr(options, key, val == "True") + setattr(final_options, key, section_val == "True") else: - setattr(options, key, val) + # if CLI options do not contain this key, set it from the config file + if getattr(cli_options, key) is None: + setattr(final_options, key, section_val) + return final_options +def expand_base_uri_options(cli_options, final_options): # if --base-uri is passed, set connection parameters from it - if options.base_uri is not None: - u = urlparse.urlparse(options.base_uri) + if final_options.base_uri is not None: + u = urlparse.urlparse(final_options.base_uri) for key in ["hostname", "port", "username", "password"]: if getattr(u, key) is not None: - setattr(options, key, getattr(u, key)) + setattr(final_options, key, getattr(u, key)) if u.path is not None and (u.path != "") and (u.path != "/"): eprint("WARNING: path in --base-uri is ignored. Please specify --vhost and/or --path-prefix separately.\n") - - return (options, args) - + return final_options def assert_usage(expr, error): if not expr: @@ -690,17 +709,15 @@ class Management: if self.options.vhost: uri += "/%s" % quote_plus(self.options.vhost) definitions = self.get(uri) - f = open(path, 'w') - f.write(definitions) - f.close() + with open(path, 'wb') as f: + f.write(definitions.encode()) self.verbose("Exported definitions for %s to \"%s\"" % (self.options.hostname, path)) def invoke_import(self): path = self.get_arg() - f = open(path, 'r') - definitions = f.read() - f.close() + with open(path, 'rb') as f: + definitions = f.read() uri = "/definitions" if self.options.vhost: uri += "/%s" % quote_plus(self.options.vhost) @@ -848,8 +865,10 @@ def format_list(json_list, columns, args, options): print(json_list) return elif format == "pretty_json": - enc = json.JSONEncoder(False, False, True, True, True, 2) - print(enc.encode(json.loads(json_list))) + json_list_parsed = json.loads(json_list) + print(json.dumps(json_list_parsed, + skipkeys=False, ensure_ascii=False, check_circular=True, + allow_nan=True, sort_keys=True, indent=2)) return else: formatter = FORMATS[format] @@ -1052,13 +1071,12 @@ def write_payload_file(payload_file, json_list): result = json.loads(json_list)[0] payload = result['payload'] payload_encoding = result['payload_encoding'] - f = open(payload_file, 'w') - if payload_encoding == 'base64': - data = base64.b64decode(payload) - else: - data = payload - f.write(data) - f.close() + with open(payload_file, 'wb') as f: + if payload_encoding == 'base64': + data = base64.b64decode(payload) + else: + data = payload + f.write(data.encode("utf-8")) def print_bash_completion(): diff --git a/deps/rabbitmq_management/erlang.mk b/deps/rabbitmq_management/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_management/erlang.mk +++ b/deps/rabbitmq_management/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_management/priv/www/api/index.html b/deps/rabbitmq_management/priv/www/api/index.html index 7d5b5cab3d0432b2172bf31219ee95d1bc6c65e2..f556c4bc814930af61b3b1c79ebae9bb5478c192 100644 --- a/deps/rabbitmq_management/priv/www/api/index.html +++ b/deps/rabbitmq_management/priv/www/api/index.html @@ -1012,6 +1012,17 @@ or:
    curl -4u 'guest:guest' -XPOST localhost:15672/api/rebalance/queues/
    + + X + + + + /api/federation-links
    + /api/federation-links/vhost + + Provides status for all federation links. Requires the rabbitmq_federation_management plugin to be enabled. + + diff --git a/deps/rabbitmq_management/priv/www/js/global.js b/deps/rabbitmq_management/priv/www/js/global.js index a3429bfc16cffd0d080327a4a4c41f60c29b130c..d472a774c1acaa8cc4b5f4b968f2d0d57a423e4e 100644 --- a/deps/rabbitmq_management/priv/www/js/global.js +++ b/deps/rabbitmq_management/priv/www/js/global.js @@ -631,8 +631,13 @@ function setup_global_vars() { 'User ' + (user_administrator ? '' + user_name + '' : user_name) ); + var product = overview.rabbitmq_version; + if (overview.product_name && overview.product_version) { + product = overview.product_name + ' ' + overview.product_version; + } + $('#versions').html( - '' + fmt_escape_html(overview.rabbitmq_version) + '' + + '' + fmt_escape_html(product) + '' + 'Erlang ' + fmt_escape_html(overview.erlang_version) + '' ); nodes_interesting = false; diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs index a93a450af670fb0a8eb627c8ff97f72f89c57f1e..b1e66534e844587f92434763715aa97a78b5f8bb 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs @@ -248,12 +248,15 @@ <% } %> + +<% if(!disable_stats) { %>

    Consumers

    <%= format('consumers', {'mode': 'queue', 'consumers': queue.consumer_details}) %>
    +<% } %>

    Bindings

    diff --git a/deps/rabbitmq_management/rabbitmq-components.mk b/deps/rabbitmq_management/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_management/rabbitmq-components.mk +++ b/deps/rabbitmq_management/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl index ea4aca18e483988fc9936b00b829e82467f11a87..8741a2aec6ff58df592a4bb38d4a6fd953dc59da 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl @@ -29,6 +29,7 @@ -define(TCP_CONTEXT, rabbitmq_management_tcp). -define(TLS_CONTEXT, rabbitmq_management_tls). -define(DEFAULT_PORT, 15672). +-define(DEFAULT_TLS_PORT, 15671). start(_Type, _StartArgs) -> case application:get_env(rabbitmq_management_agent, disable_metrics_collector, false) of @@ -94,12 +95,15 @@ get_listeners_config() -> maybe_disable_sendfile(Listeners) -> DisableSendfile = #{sendfile => false}, - lists:map(fun(Listener) -> - CowboyOpts0 = maps:from_list(proplists:get_value(cowboy_opts, Listener, [])), - - [{cowboy_opts, maps:to_list(maps:merge(DisableSendfile, CowboyOpts0))} | lists:keydelete(cowboy_opts, 1, Listener)] - end, - Listeners). + F = fun(L0) -> + CowboyOptsL0 = proplists:get_value(cowboy_opts, L0, []), + CowboyOptsM0 = maps:from_list(CowboyOptsL0), + CowboyOptsM1 = maps:merge(DisableSendfile, CowboyOptsM0), + CowboyOptsL1 = maps:to_list(CowboyOptsM1), + L1 = lists:keydelete(cowboy_opts, 1, L0), + [{cowboy_opts, CowboyOptsL1}|L1] + end, + lists:map(F, Listeners). has_configured_legacy_listener() -> has_configured_listener(listener). @@ -122,37 +126,52 @@ get_legacy_listener() -> get_tls_listener() -> {ok, Listener0} = application:get_env(rabbitmq_management, ssl_config), - [{ssl, true} | Listener0]. + case proplists:get_value(cowboy_opts, Listener0) of + undefined -> + [{ssl, true}, {ssl_opts, Listener0}]; + CowboyOpts -> + Listener1 = lists:keydelete(cowboy_opts, 1, Listener0), + [{ssl, true}, {ssl_opts, Listener1}, {cowboy_opts, CowboyOpts}] + end. get_tcp_listener() -> application:get_env(rabbitmq_management, tcp_config, []). -start_listener(Listener, IgnoreApps, NeedLogStartup) -> - {Type, ContextName} = case is_tls(Listener) of +start_listener(Listener0, IgnoreApps, NeedLogStartup) -> + {Type, ContextName} = case is_tls(Listener0) of true -> {tls, ?TLS_CONTEXT}; false -> {tcp, ?TCP_CONTEXT} end, - {ok, _} = register_context(ContextName, Listener, IgnoreApps), + {ok, Listener1} = ensure_port(Type, Listener0), + {ok, _} = register_context(ContextName, Listener1, IgnoreApps), case NeedLogStartup of - true -> log_startup(Type, Listener); + true -> log_startup(Type, Listener1); false -> ok end, ok. -register_context(ContextName, Listener0, IgnoreApps) -> - M0 = maps:from_list(Listener0), - %% include default port if it's not provided in the config - %% as Cowboy won't start if the port is missing - M1 = maps:merge(#{port => ?DEFAULT_PORT}, M0), +register_context(ContextName, Listener, IgnoreApps) -> + Dispatcher = rabbit_mgmt_dispatcher:build_dispatcher(IgnoreApps), rabbit_web_dispatch:register_context_handler( - ContextName, maps:to_list(M1), "", - rabbit_mgmt_dispatcher:build_dispatcher(IgnoreApps), - "RabbitMQ Management"). + ContextName, Listener, "", + Dispatcher, "RabbitMQ Management"). unregister_all_contexts() -> rabbit_web_dispatch:unregister_context(?TCP_CONTEXT), rabbit_web_dispatch:unregister_context(?TLS_CONTEXT). +ensure_port(tls, Listener) -> + do_ensure_port(?DEFAULT_TLS_PORT, Listener); +ensure_port(tcp, Listener) -> + do_ensure_port(?DEFAULT_PORT, Listener). + +do_ensure_port(Port, Listener) -> + %% include default port if it's not provided in the config + %% as Cowboy won't start if the port is missing + M0 = maps:from_list(Listener), + M1 = maps:merge(#{port => Port}, M0), + {ok, maps:to_list(M1)}. + log_startup(tcp, Listener) -> rabbit_log:info("Management plugin: HTTP (non-TLS) listener started on port ~w", [port(Listener)]); log_startup(tls, Listener) -> diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl index 7dd544b58f1a041f7af8ad85af0ea1b01212c519..a71fe11bb7fbbf78b80dae7ce6a16bec9b348b40 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl @@ -98,12 +98,19 @@ init([]) -> args = [], multiplier = Mult}}. +handle_call({fetch, _FetchFun, FunArgs} = Msg, From, + #state{data = CachedData, args = Args} = State) when + CachedData =/= none andalso Args =/= FunArgs -> + %% there is cached data that needs to be invalidated + handle_call(Msg, From, ?RESET_STATE(State)); handle_call({fetch, FetchFun, FunArgs}, _From, - #state{data = CachedData, args = Args, - multiplier = Mult, timer_ref = Ref} = State) when - CachedData =:= none orelse Args =/= FunArgs -> + #state{data = none, + multiplier = Mult, timer_ref = Ref} = State) -> + %% force a gc here to clean up previously cleared data + garbage_collect(), case Ref of - R when is_reference(R) -> _ = erlang:cancel_timer(R); + R when is_reference(R) -> + _ = erlang:cancel_timer(R); _ -> ok end, @@ -124,14 +131,14 @@ handle_call({fetch, _FetchFun, _}, _From, #state{data = Data} = State) -> Reply = {ok, Data}, {reply, Reply, State}; handle_call(purge_cache, _From, State) -> - {reply, ok, ?RESET_STATE(State)}. + {reply, ok, ?RESET_STATE(State), hibernate}. handle_cast(_Msg, State) -> {noreply, State}. handle_info(purge_cache, State) -> - {noreply, ?RESET_STATE(State)}; + {noreply, ?RESET_STATE(State), hibernate}; handle_info(_Info, State) -> {noreply, State}. diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl index 47394cc3f69a58a0b2bb2b18b09219c2e7cbe928..29d79eefccd4ce21db4083bad5ed6e3b441dbf31 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl @@ -66,10 +66,14 @@ all_definitions(ReqData, Context) -> QNames = [{pget(name, Q), pget(vhost, Q)} || Q <- Qs], Bs = [B || B <- rabbit_mgmt_wm_bindings:basic(ReqData), export_binding(B, QNames)], - {ok, Vsn} = application:get_key(rabbit, vsn), + Vsn = rabbit:base_product_version(), + ProductName = rabbit:product_name(), + ProductVersion = rabbit:product_version(), rabbit_mgmt_util:reply( [{rabbit_version, rabbit_data_coercion:to_binary(Vsn)}, - {rabbitmq_version, rabbit_data_coercion:to_binary(Vsn)}] ++ + {rabbitmq_version, rabbit_data_coercion:to_binary(Vsn)}, + {product_name, rabbit_data_coercion:to_binary(ProductName)}, + {product_version, rabbit_data_coercion:to_binary(ProductVersion)}] ++ filter( [{users, rabbit_mgmt_wm_users:users(all)}, {vhosts, rabbit_mgmt_wm_vhosts:basic()}, diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl index 06a380a3ae8e38cf9869d4688a3537345de523ff..82d6abf79ab2dbe7cafa195f92062b0e3ad7040b 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl @@ -52,7 +52,9 @@ to_json(ReqData, Context = #context{user = User = #user{tags = Tags}}) -> {rates_mode, RatesMode}, {sample_retention_policies, SRP}, {exchange_types, ExchangeTypes}, - {rabbitmq_version, version(rabbit)}, + {product_version, list_to_binary(rabbit:product_version())}, + {product_name, list_to_binary(rabbit:product_name())}, + {rabbitmq_version, list_to_binary(rabbit:base_product_version())}, {cluster_name, rabbit_nodes:cluster_name()}, {erlang_version, erlang_version()}, {erlang_full_version, erlang_full_version()}, diff --git a/deps/rabbitmq_management_agent/erlang.mk b/deps/rabbitmq_management_agent/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_management_agent/erlang.mk +++ b/deps/rabbitmq_management_agent/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_management_agent/rabbitmq-components.mk b/deps/rabbitmq_management_agent/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_management_agent/rabbitmq-components.mk +++ b/deps/rabbitmq_management_agent/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_mqtt/erlang.mk b/deps/rabbitmq_mqtt/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_mqtt/erlang.mk +++ b/deps/rabbitmq_mqtt/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_mqtt/rabbitmq-components.mk b/deps/rabbitmq_mqtt/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_mqtt/rabbitmq-components.mk +++ b/deps/rabbitmq_mqtt/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_aws/erlang.mk b/deps/rabbitmq_peer_discovery_aws/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_peer_discovery_aws/erlang.mk +++ b/deps/rabbitmq_peer_discovery_aws/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_common/erlang.mk b/deps/rabbitmq_peer_discovery_common/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_peer_discovery_common/erlang.mk +++ b/deps/rabbitmq_peer_discovery_common/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl index 8548c3089b5c1880bbae28e861ae763c1509200c..85c55edf6acb975806f3c152be935ed4bb3c0c96 100644 --- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl +++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl @@ -19,7 +19,7 @@ -include("rabbit_peer_discovery.hrl"). --export([get/3, config_map/1]). +-export([get/3, get_integer/3, config_map/1]). %% %% API @@ -38,6 +38,19 @@ get(Key, Mapping, Config) -> get_with_entry_meta(Key, maps:get(Key, Mapping), Config) end. +-spec get_integer(Key :: atom(), + Mapping :: #{atom() => peer_discovery_config_entry_meta()}, + Config :: #{atom() => peer_discovery_config_value()}) -> integer(). + +get_integer(Key, Mapping, Config) -> + case maps:is_key(Key, Mapping) of + false -> + rabbit_log:error("Key ~s is not found in peer discovery config mapping ~p!", [Key, Mapping]), + throw({badkey, Key}); + true -> + get_integer_with_entry_meta(Key, maps:get(Key, Mapping), Config) + end. + -spec config_map(atom()) -> #{atom() => peer_discovery_config_value()}. config_map(BackendConfigKey) -> @@ -63,6 +76,15 @@ get_with_entry_meta(Key, #peer_discovery_config_entry_meta{env_variable = EV, type = Type}, Map) -> normalize(Type, get_from_env_variable_or_map(Map, EV, Key, Default)). +-spec get_integer_with_entry_meta(Key :: atom(), + EntryMeta :: #peer_discovery_config_entry_meta{}, + Map :: #{atom() => peer_discovery_config_value()}) -> integer(). + +get_integer_with_entry_meta(Key, #peer_discovery_config_entry_meta{env_variable = EV, + default_value = Default, + type = Type}, Map) -> + normalize(Type, get_integer_from_env_variable_or_map(Map, EV, Key, Default)). + %%-------------------------------------------------------------------- %% @private @@ -81,6 +103,16 @@ get_from_env_variable_or_map(Map, OSKey, AppKey, Default) -> Value -> Value end. +-spec get_integer_from_env_variable_or_map(Map :: map(), OSKey :: string(), AppKey :: atom(), + Default :: integer()) + -> integer(). +get_integer_from_env_variable_or_map(Map, OSKey, AppKey, Default) -> + case rabbit_peer_discovery_util:getenv(OSKey) of + false -> maps:get(AppKey, Map, Default); + "" -> Default; + Value -> Value + end. + %%-------------------------------------------------------------------- %% @private %% @doc diff --git a/deps/rabbitmq_peer_discovery_consul/erlang.mk b/deps/rabbitmq_peer_discovery_consul/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_peer_discovery_consul/erlang.mk +++ b/deps/rabbitmq_peer_discovery_consul/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl index c4fafdbf7e28689a1847ced3f154502ab8ec244f..12c166074f718bea0c4e237672aa2f1e0037c6b7 100644 --- a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl +++ b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl @@ -66,7 +66,7 @@ list_nodes() -> M = maps:from_list(Proplist), case rabbit_peer_discovery_httpc:get(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, health, service, get_config_key(consul_svc, M)]), list_nodes_query_args(), maybe_add_acl([]), @@ -97,7 +97,7 @@ register() -> rabbit_log:debug("Consul registration body: ~s", [Body]), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, service, register]), [], maybe_add_acl([]), @@ -116,7 +116,7 @@ unregister() -> rabbit_log:debug("Unregistering with Consul using service ID '~s'", [ID]), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, service, deregister, ID]), [], maybe_add_acl([]), @@ -142,7 +142,8 @@ post_registration() -> -spec lock(Node :: atom()) -> {ok, Data :: term()} | {error, Reason :: string()}. lock(Node) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), + M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), + rabbit_log:debug("Effective Consul peer discovery configuration: ~p", [M]), case create_session(Node, get_config_key(consul_svc_ttl, M)) of {ok, SessionId} -> TRef = start_session_ttl_updater(SessionId), @@ -178,6 +179,13 @@ unlock({SessionId, TRef}) -> get_config_key(Key, Map) -> ?CONFIG_MODULE:get(Key, ?CONFIG_MAPPING, Map). +-spec get_integer_config_key(Key :: atom(), Map :: #{atom() => peer_discovery_config_value()}) + -> integer(). + +get_integer_config_key(Key, Map) -> + ?CONFIG_MODULE:get_integer(Key, ?CONFIG_MAPPING, Map). + + -spec filter_nodes(ConsulResult :: list(), AllowWarning :: atom()) -> list(). filter_nodes(Nodes, Warn) -> case Warn of @@ -458,7 +466,7 @@ send_health_check_pass() -> rabbit_log:debug("Running Consul health check"), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, check, pass, Service]), [], maybe_add_acl([]), @@ -544,7 +552,7 @@ consul_session_create(Query, Headers, Body) -> {ok, Serialized} -> rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/session/create", Query, Headers, @@ -663,7 +671,7 @@ consul_kv_write(Path, Query, Headers, Body) -> {ok, Serialized} -> rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/kv/" ++ Path, Query, Headers, @@ -686,7 +694,7 @@ consul_kv_read(Path, Query, Headers) -> M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), rabbit_peer_discovery_httpc:get(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/kv/" ++ Path, Query, Headers, @@ -770,7 +778,7 @@ consul_session_renew(SessionId, Query, Headers) -> M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, session, renew, rabbit_data_coercion:to_atom(SessionId)]), Query, Headers, diff --git a/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch b/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch new file mode 100644 index 0000000000000000000000000000000000000000..e8fed3532e7394109309bec57ae07b02d4569626 --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch @@ -0,0 +1,19 @@ +--- .travis.yml ++++ .travis.yml +@@ -1,7 +1,7 @@ + # vim:sw=2:et: + + os: linux +-dist: xenial ++dist: bionic + language: elixir + notifications: + email: +@@ -13,6 +13,7 @@ addons: + apt: + packages: + - awscli ++ - daemonize + cache: + apt: true + env: diff --git a/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md b/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md index 42af1f7517fd1085ef59509c3a9e9620767480f0..593328031673380c2a397dfcbf77bbc4f4e3d473 100644 --- a/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md +++ b/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md @@ -78,21 +78,16 @@ ask the core team for their opinion on the [RabbitMQ users mailing list][rmq-use ## Running Tests -To run a "fast suite" (a subset of tests): - - make ct-fast - -To run a "slow suite" (a subset of tests that take much longer to run): - - make ct-slow +See [RUNNING_TESTS.md](./RUNNING_TESTS.md) to learn how the test suites provision an `etcd` +node and what the prerequisites are. To run a particular suite: make ct-$suite_name -for example, to run the `backing_queue` suite: +for example, to run the `system` suite: - make ct-backing_queue + make ct-system Finally, diff --git a/deps/rabbitmq_peer_discovery_etcd/Makefile b/deps/rabbitmq_peer_discovery_etcd/Makefile index b1800eff5ada987fbf823a40997846b5cdcbe4e1..114c3eedb623567a5be959757975f17bb80a39fb 100644 --- a/deps/rabbitmq_peer_discovery_etcd/Makefile +++ b/deps/rabbitmq_peer_discovery_etcd/Makefile @@ -2,9 +2,11 @@ PROJECT = rabbitmq_peer_discovery_etcd PROJECT_DESCRIPTION = etcd-based RabbitMQ peer discovery backend PROJECT_MOD = rabbitmq_peer_discovery_etcd_app -DEPS = rabbit_common rabbitmq_peer_discovery_common rabbit +DEPS = rabbit_common rabbitmq_peer_discovery_common rabbit eetcd gun TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers ct_helper meck dep_ct_helper = git https://github.com/extend/ct_helper.git master +dep_gun = hex 1.3.2 +dep_eetcd = hex 0.3.2 DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk diff --git a/deps/rabbitmq_peer_discovery_etcd/README.md b/deps/rabbitmq_peer_discovery_etcd/README.md index 41909afb286c93cd232a1dc738e0516341f032aa..17e4bbd6e7236a266e5010f76f437cf577f9c2ca 100644 --- a/deps/rabbitmq_peer_discovery_etcd/README.md +++ b/deps/rabbitmq_peer_discovery_etcd/README.md @@ -18,12 +18,10 @@ are not in scope for this plugin. This plugin requires RabbitMQ 3.7.0 or later. -For an etcd-based peer discovery and cluster formation -mechanism that supports 3.6.x, see [rabbitmq-autocluster](https://github.com/rabbitmq/rabbitmq-autocluster). ## Supported etcd Versions -The plugin supports etcd v2 and v3. +The plugin supports etcd 3.4 or later and uses the current stable v3 gRPC API. ## Installation diff --git a/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md b/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md new file mode 100644 index 0000000000000000000000000000000000000000..9aafe85ca708a7535e94ca718f6b7e6947140b24 --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md @@ -0,0 +1,33 @@ +## Running Common Test Suites + +```shell +gmake tests +``` + +When running tests via `gmake tests`, there is no need to run the +`init-etcd.sh` script as the test suite will do it for you. + + +## etcd Node Management + +The test suite of this plugin ships with a [script](./test/system_SUITE_data/init-etcd.sh) +that starts an `etcd` node in the background. + +This script can also be used to start a node for experimenting with this +plugin. To run it: + +```shell +./test/system_SUITE_data/init-etcd.sh [etcd data dir] [etcd client port] +``` + +where `[etcd data dir]` is the desired `etcd` node data directory path. + +The script depends on the [`daemonize` +tool](https://software.clapper.org/daemonize/) for running the process in the +background and pid file creation. + +To stop a node started this way use the pid file created by `daemonize`: + +```shell +pkill -INT $(cat [etcd data dir]/etcd.pid) +``` diff --git a/deps/rabbitmq_peer_discovery_etcd/erlang.mk b/deps/rabbitmq_peer_discovery_etcd/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_peer_discovery_etcd/erlang.mk +++ b/deps/rabbitmq_peer_discovery_etcd/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md deleted file mode 100644 index 552d615d349b420a58ea38ba0a3bf2db184504ee..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md +++ /dev/null @@ -1,30 +0,0 @@ -Dynamic RabbitMQ cluster using: - -1. [Docker compose](https://docs.docker.com/compose/) - -2. [Etcd](https://coreos.com/etcd/) - -3. [HA proxy](https://github.com/docker/dockercloud-haproxy) - -4. [rabbitmq-peer-discovery-etcd plugin](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd) - ---- - -How to run: - -``` -docker-compose up -``` - -How to scale: - -``` -docker-compose up --scale rabbit=2 -d -``` - - ---- - -Check running status: - -- RabbitMQ Management: http://localhost:15672/#/ \ No newline at end of file diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins deleted file mode 100644 index 1397d5ea23fb95fab2765bf4f5f6b70373016546..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins +++ /dev/null @@ -1 +0,0 @@ -[rabbitmq_management,rabbitmq_peer_discovery_etcd]. \ No newline at end of file diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf deleted file mode 100644 index 0b391906a15183b5ca317c79310b3f756eac26b5..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf +++ /dev/null @@ -1,10 +0,0 @@ -loopback_users.guest = false -cluster_formation.peer_discovery_backend = rabbit_peer_discovery_etcd -cluster_formation.etcd.host = etcd0 -# Set to false if automatic removal of unknown/absent nodes -# is desired. This can be dangerous, see -# * http://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup -# * https://groups.google.com/forum/#!msg/rabbitmq-users/wuOfzEywHXo/k8z_HWIkBgAJ -cluster_formation.node_cleanup.only_log_warning = true -cluster_partition_handling = autoheal -vm_memory_high_watermark.relative = 0.8 diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml deleted file mode 100644 index e876d15d611bf0eed8e6f05ec6540a1f1755f8cd..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml +++ /dev/null @@ -1,52 +0,0 @@ -version: "2" -services: - etcd0: - image: quay.io/coreos/etcd:v2.1.1 - networks: - - back - ports: - - "4001:4001" - - 2380 - - 2379 - command: - - --name=etcd0 - - --initial-cluster-token=etcd-cluster-1 - - --initial-cluster=etcd0=http://etcd0:2380 - - --initial-cluster-state=new - - --initial-advertise-peer-urls=http://etcd0:2380 - - --listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001 - - --listen-peer-urls=http://0.0.0.0:2380 - - --advertise-client-urls=http://etcd0:2379 - networks: - - back - rabbit: - environment: - - TCP_PORTS=15672, 5672 - - RABBITMQ_ERLANG_COOKIE="mycookie" - networks: - - back - image: rabbitmq:3.7 - expose: - - 15672 - - 5672 - - 5671 - - 15671 - tty: true - volumes: - - ./conf/:/etc/rabbitmq/ - command: sh -c "sleep 10; rabbitmq-server;" - lb: - image: dockercloud/haproxy - environment: - - MODE=tcp - links: - - rabbit - volumes: - - /var/run/docker.sock:/var/run/docker.sock - ports: - - 15672:15672 - - 5672:5672 - networks: - - back -networks: - back: diff --git a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl index 12880c4e2c944f59484313ef92f2ef85260aa178..062f2c5d0e42338c4e3bdae14ce14ada88ae44b7 100644 --- a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl +++ b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl @@ -1,46 +1,19 @@ --define(CONFIG_MODULE, rabbit_peer_discovery_config). --define(UTIL_MODULE, rabbit_peer_discovery_util). --define(HTTPC_MODULE, rabbit_peer_discovery_httpc). - -define(BACKEND_CONFIG_KEY, peer_discovery_etcd). - --define(CONFIG_MAPPING, - #{ - etcd_scheme => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_SCHEME", - default_value = "http" - }, - etcd_host => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_HOST", - default_value = "localhost" - }, - etcd_port => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "ETCD_PORT", - default_value = 2379 - }, - etcd_prefix => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_PREFIX", - default_value = "rabbitmq" - }, - etcd_node_ttl => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "ETCD_NODE_TTL", - default_value = 30 - }, - cluster_name => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "CLUSTER_NAME", - default_value = "default" - }, - lock_wait_time => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "LOCK_WAIT_TIME", - default_value = 300 - } - }). - +-record(statem_data, { + endpoints, + tls_options, + connection_name, + connection_pid, + connection_monitor, + key_prefix, + cluster_name, + node_key_lease_id, + node_key_ttl_in_seconds, + %% the pid of the process returned by eetcd_lease:keep_alive/2 + %% which refreshes this node's key lease + node_lease_keepalive_pid, + lock_ttl_in_seconds, + username, + obfuscated_password +}). diff --git a/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema b/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema index 9f06066f56e548df0bba5cafb88d2e13da55bf9c..2a3a2096ed175772e783214dc49208f3a496b729 100644 --- a/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema +++ b/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema @@ -1,4 +1,24 @@ -%% etcd host +%% Endpoints + +{mapping, "cluster_formation.etcd.endpoints", "rabbit.cluster_formation.peer_discovery_etcd.endpoints", [ + {datatype, {enum, [none]}} +]}. + +{mapping, "cluster_formation.etcd.endpoints.$index", "rabbit.cluster_formation.peer_discovery_etcd.endpoints", [ + {datatype, [string, ip]} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.endpoints", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.endpoints", Conf, undefined) of + none -> []; + _ -> + Endpoints = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.endpoints", Conf), + [V || {_, V} <- Endpoints] + end +end}. + +%% Legacy: etcd host {mapping, "cluster_formation.etcd.host", "rabbit.cluster_formation.peer_discovery_etcd.etcd_host", [ {datatype, string} @@ -12,7 +32,7 @@ fun(Conf) -> end end}. -%% etcd port +%% Legacy: etcd port {mapping, "cluster_formation.etcd.port", "rabbit.cluster_formation.peer_discovery_etcd.etcd_port", [ {datatype, integer}, @@ -27,7 +47,7 @@ fun(Conf) -> end end}. -%% etcd scheme +%% Legacy: etcd scheme. The key remains for backwards compatibility, it will not be used. {mapping, "cluster_formation.etcd.scheme", "rabbit.cluster_formation.peer_discovery_etcd.etcd_scheme", [ {datatype, string} @@ -41,7 +61,7 @@ fun(Conf) -> end end}. -%% key prefix +%% key prefix appended after /rabbitmq/{discovery,locks} (a mandatory prefix we enforce as of #22) {mapping, "cluster_formation.etcd.key_prefix", "rabbit.cluster_formation.peer_discovery_etcd.etcd_prefix", [ {datatype, string} @@ -69,7 +89,7 @@ fun(Conf) -> end end}. -%% node ttl +%% node key ttl {mapping, "cluster_formation.etcd.node_ttl", "rabbit.cluster_formation.peer_discovery_etcd.etcd_node_ttl", [ {datatype, integer}, @@ -109,3 +129,144 @@ fun(Conf) -> Value -> Value end end}. + +%% authentication + +{mapping, "cluster_formation.etcd.username", "rabbit.cluster_formation.peer_discovery_etcd.etcd_username", [ + {datatype, string} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.etcd_username", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.username", Conf, undefined) of + undefined -> cuttlefish:unset(); + Value -> Value + end +end}. + +{mapping, "cluster_formation.etcd.password", "rabbit.cluster_formation.peer_discovery_etcd.etcd_password", [ + {datatype, string} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.etcd_password", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.password", Conf, undefined) of + undefined -> cuttlefish:unset(); + Value -> Value + end +end}. + +%% +%% TLS client options +%% + +{mapping, "cluster_formation.etcd.ssl_options", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options", [ + {datatype, {enum, [none]}} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.ssl_options", Conf, undefined) of + none -> []; + _ -> cuttlefish:invalid("Invalid cluster_formation.etcd.ssl_options") + end +end}. + +{mapping, "cluster_formation.etcd.ssl_options.verify", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.verify", [ + {datatype, {enum, [verify_peer, verify_none]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.fail_if_no_peer_cert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.fail_if_no_peer_cert", [ + {datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.cacertfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacertfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.certfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.certfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.cacerts.$name", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacerts", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacerts", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.cacerts", Conf), + [ list_to_binary(V) || {_, V} <- Settings ] +end}. + +{mapping, "cluster_formation.etcd.ssl_options.cert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cert", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cert", +fun(Conf) -> + list_to_binary(cuttlefish:conf_get("cluster_formation.etcd.ssl_options.cert", Conf)) +end}. + +{mapping, "cluster_formation.etcd.ssl_options.crl_check", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.crl_check", + [{datatype, [{enum, [true, false, peer, best_effort]}]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.depth", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.depth", + [{datatype, integer}, {validators, ["byte"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.dh", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dh", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dh", +fun(Conf) -> + list_to_binary(cuttlefish:conf_get("cluster_formation.etcd.ssl_options.dh", Conf)) +end}. + +{mapping, "cluster_formation.etcd.ssl_options.dhfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dhfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.RSAPrivateKey", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.DSAPrivateKey", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.PrivateKeyInfo", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", +fun(Conf) -> + case cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.key", Conf) of + [{[_,_,Key], Val}|_] -> {list_to_atom(Key), list_to_binary(Val)}; + _ -> undefined + end +end}. + +{mapping, "cluster_formation.etcd.ssl_options.keyfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.keyfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.log_alert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.log_alert", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.password", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.password", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.psk_identity", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.psk_identity", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.reuse_sessions", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.reuse_sessions", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.secure_renegotiate", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.secure_renegotiate", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.versions.$version", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.versions", + [{datatype, atom}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.versions", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.versions", Conf), + [V || {_, V} <- Settings] +end}. + +{mapping, "cluster_formation.etcd.ssl_options.ciphers.$cipher", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.ciphers", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.ciphers", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.ciphers", Conf), + lists:reverse([V || {_, V} <- Settings]) +end}. diff --git a/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl index 31bf867b31b010953b5d95949f676fa81008abff..0f41a151100dee9f3f883f11ca692f177ff4fcb4 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl @@ -25,27 +25,34 @@ -export([init/0, list_nodes/0, supports_registration/0, register/0, unregister/0, post_registration/0, lock/1, unlock/1]). --export([update_node_key/0]). - --export([lock_ttl_update_callback/1]). - -%% for tests --export([extract_nodes/1, base_path/0, base_path/1, startup_lock_path/0, node_path/1, nodes_path/1, - get_node_from_key/2]). - +-define(ETCD_CLIENT, rabbitmq_peer_discovery_etcd_v3_client). %% %% API %% init() -> - rabbit_log:debug("Peer discovery etcd: initialising..."), - ok = application:ensure_started(inets), - %% we cannot start this plugin yet since it depends on the rabbit app, + %% We cannot start this plugin yet since it depends on the rabbit app, %% which is in the process of being started by the time this function is called application:load(rabbitmq_peer_discovery_common), - ?HTTPC_MODULE:maybe_configure_proxy(), - ?HTTPC_MODULE:maybe_configure_inet6(). + application:load(rabbitmq_peer_discovery_etcd), + + %% Here we start the client very early on, before plugins have initialized. + %% We need to do it conditionally, however. + NoOp = fun() -> ok end, + Run = fun(_) -> + rabbit_log:debug("Peer discovery etcd: initialising..."), + application:ensure_all_started(eetcd), + Formation = application:get_env(rabbit, cluster_formation, []), + Opts = maps:from_list(proplists:get_value(peer_discovery_etcd, Formation, [])), + {ok, Pid} = rabbitmq_peer_discovery_etcd_v3_client:start_link(Opts), + %% unlink so that this supervisor's lifecycle does not affect RabbitMQ core + unlink(Pid), + rabbit_log:debug("etcd peer discovery: v3 client pid: ~p", [whereis(rabbitmq_peer_discovery_etcd_v3_client)]) + end, + rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, NoOp, NoOp, Run), + + ok. -spec list_nodes() -> {ok, {Nodes :: list(), NodeType :: rabbit_types:node_type()}} | {error, Reason :: string()}. @@ -60,17 +67,10 @@ list_nodes() -> [?MODULE]), {ok, {[], disc}} end, - Fun2 = fun(Proplist) -> - M = maps:from_list(Proplist), - case etcd_get(nodes_path(M), [{recursive, true}], M) of - {ok, Nodes} -> - NodeList = extract_nodes(Nodes), - {ok, NodeList}; - {error, "404"} -> - {ok, []}; - Error -> - Error - end + Fun2 = fun(_Proplist) -> + %% error logging will be done by the client + Nodes = rabbitmq_peer_discovery_etcd_v3_client:list_nodes(), + {ok, {Nodes, disc}} end, rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, Fun0, Fun1, Fun2). @@ -84,25 +84,17 @@ supports_registration() -> -spec register() -> ok | {error, string()}. register() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - case set_etcd_node_key(M) of - {ok, _} -> - rabbit_log:info("Registered node with etcd"), - ok; - {error, Error} -> - rabbit_log:error("Failed to register node with etcd: ~s", [Error]), - {error, Error} - end. + Result = ?ETCD_CLIENT:register(), + rabbit_log:info("Registered node with etcd"), + Result. -spec unregister() -> ok | {error, string()}. unregister() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - rabbit_log:info("Unregistering node with etcd"), - case etcd_delete(node_path(M), [{recursive, true}], M) of - {ok, _} -> ok; - Error -> Error - end. + %% This backend unregisters on plugin (etcd v3 client) deactivation + %% because by the time unregistration happens, the plugin and thus the client + %% it provides are already gone. MK. + ok. -spec post_registration() -> ok | {error, Reason :: string()}. @@ -112,271 +104,13 @@ post_registration() -> -spec lock(Node :: atom()) -> {ok, Data :: term()} | {error, Reason :: string()}. lock(Node) when is_atom(Node) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Now = erlang:system_time(seconds), - EndTime = Now + get_config_key(lock_wait_time, M), - lock(atom_to_list(Node) ++ " - " ++ generate_unique_string(), Now, EndTime). - - --spec unlock(Data :: term()) -> ok. - -unlock({UniqueId, TRef}) -> - stop_lock_ttl_updater(TRef), - case delete_etcd_lock_key(UniqueId) of - {ok, _} -> - ok; - {error, _} = Err -> - Err + case rabbitmq_peer_discovery_etcd_v3_client:lock(Node) of + {ok, GeneratedKey} -> GeneratedKey; + {error, _} = Error -> Error end. -%% -%% Implementation -%% - --spec get_config_key(Key :: atom(), Map :: #{atom() => peer_discovery_config_value()}) - -> peer_discovery_config_value(). - -get_config_key(Key, Map) -> - ?CONFIG_MODULE:get(Key, ?CONFIG_MAPPING, Map). - -%% @doc Update etcd, setting a key for this node with a TTL of etcd_node_ttl -%% @end --spec set_etcd_node_key(Map :: #{atom() => peer_discovery_config_value()}) - -> {ok, any()} | {error, string()}. -set_etcd_node_key(Map) -> - Interval = get_config_key(etcd_node_ttl, Map), - etcd_put(node_path(Map), [{ttl, Interval}], [{value, enabled}], Map). - -%% @doc Part of etcd path that allows us to distinguish different -%% cluster using the same etcd server. -%% @end --spec cluster_name_path_part(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -cluster_name_path_part(Map) -> - case get_config_key(cluster_name, Map) of - "undefined" -> "default"; - Value -> Value - end. - -%% @doc Return a list of path segments that are the base path for all -%% etcd keys related to current cluster. -%% @end --spec base_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -base_path(Map) -> - Segments = [v2, keys, get_config_key(etcd_prefix, Map), cluster_name_path_part(Map)], - rabbit_peer_discovery_httpc:build_path(Segments). - -%% @doc Return a list of path segments that are the base path for all -%% etcd keys related to current cluster. -%% @end --spec base_path() -> string(). -base_path() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - base_path(M). -%% @doc Returns etcd path under which nodes should be registered. -%% @end --spec nodes_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -nodes_path(Map) -> - base_path(Map) ++ "/nodes". - -%% @doc Returns etcd path under which current node should be registered -%% @end --spec node_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -node_path(Map) -> - nodes_path(Map) ++ "/" ++ atom_to_list(node()). - -%% @doc Return the list of erlang nodes -%% @end -%% --spec extract_nodes(list(), list()) -> [node()]. -extract_nodes([], Nodes) -> Nodes; -extract_nodes([H|T], Nodes) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - ToAppend = case get_node_from_key(maps:get(<<"key">>, H), M) of - {error, none} -> []; - Name -> [Name] - end, - extract_nodes(T, lists:append(Nodes, ToAppend)). - -%% @doc Return the list of erlang nodes -%% @end -%% --spec extract_nodes(list()) -> [node()]. -extract_nodes([]) -> []; -extract_nodes(Nodes) -> - Dir = maps:get(<<"node">>, Nodes), - case maps:get(<<"nodes">>, Dir, undefined) of - undefined -> []; - Values -> extract_nodes(Values, []) - end. - - -%% @doc Given an etcd key, return the erlang node name -%% @end -%% --spec get_node_from_key(binary(), Map :: #{atom() => peer_discovery_config_value()}) -> node() | rabbit_types:error('none'). -get_node_from_key(<<"/", V/binary>>, Map) -> get_node_from_key(V, Map); -get_node_from_key(V, _Map) -> - %% Nodes path is /v2/keys/{etcd-prefix}/{cluster-name}/nodes and - %% etcd returns node keys as /{etcd-prefix}/{cluster-name}/nodes/{nodename}. - %% - %% Note that both the prefix and the cluster name might contain slashes, - %% and so will the resulting key. It is, however, significantly less - %% likely that any of those will contains a /nodes/{name} sequence, - %% so that's what we extract. - %% - %% See rabbitmq/rabbitmq-peer-discovery-etcd#14 for details. - case re:run(V, <<"/nodes/([^/]+)$">>, [{capture, all_but_first, binary}]) of - nomatch -> {error, none}; - {match, [Name]} -> - ?UTIL_MODULE:node_name(Name) - end. - --spec etcd_delete(Path, Query, Map) - -> {ok, term()} | {error, string()} when - Path :: string(), - Query :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_delete(Path, Query, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:delete(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query, "")). - --spec etcd_get(Path, Query, Map) - -> {ok, term()} | {error, string()} when - Path :: string(), - Query :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_get(Path, Query, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:get(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query)). - --spec etcd_put(Path, Query, Body, Map) -> {ok, any()} | {error, string()} when - Path :: string(), - Query :: list(), - Body :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_put(Path, Query, Body, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:put(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query, ?HTTPC_MODULE:build_query(Body))). - - --spec update_node_key() -> {ok, any()} | {error, string()}. -update_node_key() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - set_etcd_node_key(M). - -%% @doc -%% Tries to acquire the lock. Will retry until the lock is finally -%% granted or time is up. -%% @end --spec lock(string(), pos_integer(), pos_integer()) -> ok | {error, string()}. -lock(_, Now, EndTime) when EndTime < Now -> - {error, "Acquiring the lock taking too long, bailing out"}; -lock(UniqueId, _, EndTime) -> - case try_insert_lock_key(UniqueId) of - true -> - TRef = start_lock_ttl_updater(UniqueId), - {ok, {UniqueId, TRef}}; - false -> - wait_for_lock_release(), - lock(UniqueId, erlang:system_time(seconds), EndTime); - {error, Reason} -> - {error, lists:flatten(io_lib:format("Error while acquiring the lock, reason: ~p", [Reason]))} - end. - -%% @doc Tries to acquire a lock in etcd. This can either succeed, fail -%% because somebody else is holding the lock, or completely file due -%% to some I/O error. -%% @end --spec try_insert_lock_key(string()) -> boolean() | {error, term()}. -try_insert_lock_key(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Ttl = get_config_key(etcd_node_ttl, M), - case set_etcd_lock_key(UniqueId, Ttl) of - {ok, _} -> - true; - %% Precondition failed - {error, "412"} -> - false; - {error, _} = Err -> - Err - end. - -%% @doc Orders etcd to create startup lock key if it doesn't exist already. -%% @end --spec set_etcd_lock_key(string(), non_neg_integer()) -> {ok, term()} | {error, string()}. -set_etcd_lock_key(UniqueId, Ttl) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - rabbit_log:debug("Will set a lock key with Etcd, path: ~p", [startup_lock_path()]), - etcd_put(startup_lock_path(), - [{ttl, Ttl}, {'prevExist', "false"}], - [{value, UniqueId}], - M). - -%% @doc Returns etcd path for startup lock -%% @end --spec startup_lock_path() -> string(). -startup_lock_path() -> - base_path() ++ "/startup_lock". - -%% @doc Generate random string. We are using it for compare-and-change -%% operations in etcd. -%% @end --spec generate_unique_string() -> string(). -generate_unique_string() -> - [ $a - 1 + rand:uniform(26) || _ <- lists:seq(1, 32) ]. - --spec start_lock_ttl_updater(string()) -> timer:tref(). -start_lock_ttl_updater(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Interval = get_config_key(etcd_node_ttl, M), - rabbit_log:debug("Starting startup lock refresher"), - {ok, TRef} = timer:apply_interval(Interval * 500, ?MODULE, - lock_ttl_update_callback, [UniqueId]), - TRef. - --spec stop_lock_ttl_updater(timer:tref()) -> ok. -stop_lock_ttl_updater(TRef) -> - timer:cancel(TRef), - rabbit_log:debug("Stopped startup lock refresher"), - ok. - --spec wait_for_lock_release() -> ok. -wait_for_lock_release() -> - %% XXX Try to use etcd wait feature, but we somehow need to know - %% the index from the last lock attempt operation. - timer:sleep(1000). - -%% @doc Delete startup lock in etcd, but only if we are the holder of that lock. -%% @end --spec delete_etcd_lock_key(string()) -> {ok, term()} | {error, string()}. -delete_etcd_lock_key(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - etcd_delete(startup_lock_path(), - [{'prevExist', "true"}, {'prevValue', UniqueId}], - M). - --spec lock_ttl_update_callback(string()) -> string(). -lock_ttl_update_callback(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - _ = refresh_etcd_lock_ttl(UniqueId, get_config_key(etcd_node_ttl, M)), - UniqueId. +-spec unlock(Data :: term()) -> ok. -%% @doc Refresh startup lock TTL in etcd, but only if we are the holder of that lock. -%% @end --spec refresh_etcd_lock_ttl(string(), non_neg_integer()) -> {ok, term()} | {error, string()}. -refresh_etcd_lock_ttl(UniqueId, Ttl) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - etcd_put(startup_lock_path(), - [], - [{ttl, Ttl}, {'prevExist', true}, {'prevValue', UniqueId}, {refresh, true}], - M). +unlock(GeneratedKey) -> + rabbitmq_peer_discovery_etcd_v3_client:unlock(GeneratedKey). diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl index 1118b311d0da6c3ddd646d2ad429ae550b354c19..100bece2c7a3ffa47da15a8e109441cc9da06a6a 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl @@ -21,10 +21,18 @@ %% -behaviour(application). --export([start/2, stop/1]). +-export([start/2, stop/1, prep_stop/1]). start(_Type, _StartArgs) -> + %% The tree had been started earlier, see rabbit_peer_discovery_etcd:init/0. MK. rabbitmq_peer_discovery_etcd_sup:start_link(). +prep_stop(_State) -> + try + rabbitmq_peer_discovery_etcd_v3_client:unregister() + catch + _:_ -> ok + end. + stop(_State) -> ok. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl deleted file mode 100644 index 580a3e672b1992978f10f915351e887a5de41000..0000000000000000000000000000000000000000 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl +++ /dev/null @@ -1,92 +0,0 @@ -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License at -%% http://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -%% License for the specific language governing rights and limitations -%% under the License. -%% -%% The Original Code is RabbitMQ Management Console. -%% -%% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. -%% - -%% This gen_server starts a periodic timer on behalf of -%% a short lived process that kicks off peer discovery. -%% This is so that the timer is not automatically canceled -%% and cleaned up by the timer server when the short lived -%% process terminates. - --module(rabbitmq_peer_discovery_etcd_health_check_helper). - --behaviour(gen_server). - --include_lib("rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl"). --include("rabbit_peer_discovery_etcd.hrl"). - --export([start_link/0]). --export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, - code_change/3]). - --record(state, {timer_ref = undefined}). - --type(state() :: #state{timer_ref :: timer:tref() | undefined}). - - -%% -%% API -%% - -start_link() -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). - --spec init(list()) -> {ok, state()}. - -init([]) -> - Map = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - case ?CONFIG_MODULE:get(etcd_node_ttl, ?CONFIG_MAPPING, Map) of - undefined -> - {ok, #state{timer_ref = none}}; - %% in seconds - Interval -> - %% We cannot use timer:apply_interval/4 here because this - %% function is executed in a short live process and when it - %% exits, the timer module will automatically cancel the - %% timer. - %% - %% Instead we delegate to a locally registered gen_server, - %% `rabbitmq_peer_discovery_etcd_health_check_helper`. - %% - %% The value is 1/2 of what's configured to avoid a race - %% condition between check TTL expiration and in flight - %% notifications - rabbit_log:info("Starting etcd health check notifier " - "(effective interval: ~p milliseconds)", - [Interval]), - {ok, TRef} = timer:apply_interval(Interval * 500, - rabbit_peer_discovery_etcd, - update_node_key, []), - {ok, #state{timer_ref = TRef}} - end. - -handle_call(_Msg, _From, State) -> - {reply, not_understood, State}. - -handle_cast(_Msg, State) -> - {noreply, State}. - -handle_info(_MSg, State) -> - {noreply, State}. - -terminate(_Arg, #state{timer_ref = undefined}) -> - ok; - -terminate(_Arg, #state{timer_ref = TRef}) -> - timer:cancel(TRef), - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl index c8522871168ab740a1434d9ced98060a265d43a8..72c3ccd30e0bacecfc35b47e4a257a21a63ff01e 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl @@ -27,20 +27,32 @@ %% init([]) -> - Flags = #{strategy => one_for_one, intensity => 1, period => 1}, + Flags = #{strategy => one_for_one, intensity => 10, period => 1}, Fun0 = fun() -> {ok, {Flags, []}} end, Fun1 = fun() -> {ok, {Flags, []}} end, Fun2 = fun(_) -> - Specs = [#{id => rabbitmq_peer_discovery_etcd_health_check_helper, - start => {rabbitmq_peer_discovery_etcd_health_check_helper, start_link, []}, - restart => permanent, - shutdown => ?SUPERVISOR_WAIT, - type => worker, - modules => [rabbitmq_peer_discovery_etcd_health_check_helper] - }], - {ok, {Flags, Specs}} + %% we stop the previously started client and "re-attach" it. MK. + rabbitmq_peer_discovery_etcd_v3_client:stop(), + Formation = application:get_env(rabbit, cluster_formation, []), + Opts = maps:from_list(proplists:get_value(peer_discovery_etcd, Formation, [])), + EtcdClientFSM = #{ + id => rabbitmq_peer_discovery_etcd_v3_client, + start => {rabbitmq_peer_discovery_etcd_v3_client, start_link, [Opts]}, + restart => permanent, + shutdown => ?SUPERVISOR_WAIT, + type => worker, + modules => [rabbitmq_peer_discovery_etcd_v3_client] + }, + Specs = [ + EtcdClientFSM + ], + {ok, {Flags, Specs}} end, rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, Fun0, Fun1, Fun2). start_link() -> - supervisor:start_link({local, ?MODULE}, ?MODULE, []). + case supervisor:start_link({local, ?MODULE}, ?MODULE, []) of + {ok, Pid} -> {ok, Pid}; + {error, {already_started, Pid}} -> {ok, Pid}; + {error, _} = Err -> Err + end. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl new file mode 100644 index 0000000000000000000000000000000000000000..09ea0a87e587e23209d5afe3a70c7d99b6b32b2d --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl @@ -0,0 +1,448 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% http://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 VMware, Inc. or its affiliates. All rights reserved. +%% +-module(rabbitmq_peer_discovery_etcd_v3_client). + +%% API +-export([]). + + +-behaviour(gen_statem). + +-export([start_link/1, start/1, stop/0]). +-export([init/1, callback_mode/0, terminate/3]). +-export([register/1, register/0, unregister/1, unregister/0, list_nodes/0, list_nodes/1]). +-export([lock/0, lock/1, lock/2, unlock/0, unlock/1, unlock/2]). +-export([recover/3, connected/3, disconnected/3]). + +%% for tests +-export([extract_node/1, filter_node/1, registration_value/1, node_key_base/1, node_key/1, lock_key_base/1]). + +-import(rabbit_data_coercion, [to_binary/1, to_list/1]). + +-compile(nowarn_unused_function). + +-include("rabbit_peer_discovery_etcd.hrl"). + +%% +%% API +%% + +-define(ETCD_CONN_NAME, ?MODULE). +%% 60s by default matches the default heartbeat timeout. +%% We add 1s for state machine bookkeeping and +-define(DEFAULT_NODE_KEY_LEASE_TTL, 61). +%% don't allow node lease key TTL to be lower than this +%% as overly low values can cause annoying timeouts in etcd client operations +-define(MINIMUM_NODE_KEY_LEASE_TTL, 15). +%% default randomized delay range is 5s to 60s, so this value +%% produces a comparable delay +-define(DEFAULT_LOCK_WAIT_TTL, 70). +%% don't allow lock lease TTL to be lower than this +%% as overly low values can cause annoying timeouts in etcd client operations +-define(MINIMUM_LOCK_WAIT_TTL, 30). + +-define(CALL_TIMEOUT, 15000). + +start(Conf) -> + gen_statem:start({local, ?MODULE}, ?MODULE, Conf, []). + +start_link(Conf) -> + gen_statem:start_link({local, ?MODULE}, ?MODULE, Conf, []). + +stop() -> + gen_statem:stop(?MODULE). + +init(Args) -> + ok = application:ensure_started(eetcd), + Settings = normalize_settings(Args), + Endpoints = maps:get(endpoints, Settings), + Username = maps:get(etcd_username, Settings, undefined), + Password = maps:get(etcd_password, Settings, undefined), + TLSOpts = maps:get(ssl_options, Settings, []), + Actions = [{next_event, internal, start}], + {ok, recover, #statem_data{ + endpoints = Endpoints, + tls_options = TLSOpts, + username = Username, + obfuscated_password = obfuscate(Password), + key_prefix = maps:get(etcd_prefix, Settings, <<"rabbitmq">>), + node_key_ttl_in_seconds = erlang:max( + ?MINIMUM_NODE_KEY_LEASE_TTL, + maps:get(etcd_node_ttl, Settings, ?DEFAULT_NODE_KEY_LEASE_TTL) + ), + cluster_name = maps:get(cluster_name, Settings, <<"default">>), + lock_ttl_in_seconds = erlang:max( + ?MINIMUM_LOCK_WAIT_TTL, + maps:get(lock_wait_time, Settings, ?DEFAULT_LOCK_WAIT_TTL) + ) + }, Actions}. + +callback_mode() -> [state_functions, state_enter]. + +terminate(Reason, State, Data) -> + rabbit_log:debug("etcd v3 API client will terminate in state ~p, reason: ~p", + [State, Reason]), + disconnect(?ETCD_CONN_NAME, Data), + rabbit_log:debug("etcd v3 API client has disconnected"), + rabbit_log:debug("etcd v3 API client: total number of connections to etcd is ~p", [length(eetcd_conn_sup:info())]), + ok. + +register() -> + register(?MODULE). + +register(ServerRef) -> + gen_statem:call(ServerRef, register, ?CALL_TIMEOUT). + +unregister() -> + ?MODULE:unregister(?MODULE). + +unregister(ServerRef) -> + gen_statem:call(ServerRef, unregister, ?CALL_TIMEOUT). + +list_nodes() -> + list_nodes(?MODULE). + +list_nodes(ServerRef) -> + gen_statem:call(ServerRef, list_keys, ?CALL_TIMEOUT). + +lock() -> + lock(?MODULE, node()). + +lock(Node) -> + lock(?MODULE, Node). + +lock(ServerRef, Node) -> + gen_statem:call(ServerRef, {lock, Node}, ?CALL_TIMEOUT). + +unlock() -> + unlock(?MODULE, node()). + +unlock(LockKey) -> + unlock(?MODULE, LockKey). + +unlock(ServerRef, LockKey) -> + gen_statem:call(ServerRef, {unlock, LockKey}, ?CALL_TIMEOUT). + +%% +%% States +%% + +recover(enter, _PrevState, #statem_data{endpoints = Endpoints}) -> + rabbit_log:debug("etcd v3 API client has entered recovery state, endpoints: ~s", + [string:join(Endpoints, ",")]), + keep_state_and_data; +recover(internal, start, Data = #statem_data{endpoints = Endpoints, connection_monitor = Ref}) -> + rabbit_log:debug("etcd v3 API client will attempt to connect, endpoints: ~s", + [string:join(Endpoints, ",")]), + maybe_demonitor(Ref), + {Transport, TransportOpts} = pick_transport(Data), + case Transport of + tcp -> rabbit_log:info("etcd v3 API client is configured to connect over plain TCP, without using TLS"); + tls -> rabbit_log:info("etcd v3 API client is configured to use TLS") + end, + ConnName = ?ETCD_CONN_NAME, + case connect(ConnName, Endpoints, Transport, TransportOpts, Data) of + {ok, Pid} -> + rabbit_log:debug("etcd v3 API client connection: ~p", [Pid]), + rabbit_log:debug("etcd v3 API client: total number of connections to etcd is ~p", [length(eetcd_conn_sup:info())]), + {next_state, connected, Data#statem_data{ + connection_name = ConnName, + connection_pid = Pid, + connection_monitor = monitor(process, Pid) + }}; + {error, Errors} -> + [rabbit_log:error("etcd peer discovery: failed to connect to endpoint ~p: ~p", [Endpoint, Err]) || {Endpoint, Err} <- Errors], + ensure_disconnected(?ETCD_CONN_NAME, Data), + Actions = [{state_timeout, reconnection_interval(), recover}], + {keep_state, reset_statem_data(Data), Actions} + end; +recover(state_timeout, _PrevState, Data) -> + rabbit_log:debug("etcd peer discovery: connection entered a reconnection delay state"), + ensure_disconnected(?ETCD_CONN_NAME, Data), + {next_state, recover, reset_statem_data(Data)}; +recover({call, From}, Req, _Data) -> + rabbit_log:error("etcd v3 API: client received a call ~p while not connected, will do nothing", [Req]), + gen_statem:reply(From, {error, not_connected}), + keep_state_and_data. + + +connected(enter, _PrevState, Data) -> + rabbit_log:info("etcd peer discovery: successfully connected to etcd"), + + {keep_state, acquire_node_key_lease_grant(Data)}; +connected(info, {'DOWN', ConnRef, process, ConnPid, Reason}, Data = #statem_data{ + connection_pid = ConnPid, + connection_monitor = ConnRef + }) -> + rabbit_log:debug("etcd peer discovery: connection to etcd ~p is down: ~p", [ConnPid, Reason]), + maybe_demonitor(ConnRef), + {next_state, recover, reset_statem_data(Data)}; +connected({call, From}, {lock, _Node}, Data = #statem_data{connection_name = Conn, lock_ttl_in_seconds = TTL}) -> + case eetcd_lease:grant(eetcd_kv:new(Conn), TTL) of + {ok, #{'ID' := LeaseID}} -> + Key = lock_key_base(Data), + rabbit_log:debug("etcd peer discovery: granted a lease ~p for registration lock ~s with TTL = ~p", [LeaseID, Key, TTL]), + case eetcd_lock:lock(lock_context(Conn, Data), Key, LeaseID) of + {ok, #{key := GeneratedKey}} -> + rabbit_log:debug("etcd peer discovery: successfully acquired a lock, lock owner key: ~s", [GeneratedKey]), + reply_and_retain_state(From, {ok, GeneratedKey}); + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to acquire a lock using key ~s: ~p", [Key, Error]), + reply_and_retain_state(From, Error) + end; + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to get a lease for registration lock: ~p", [Error]), + reply_and_retain_state(From, Error) + end; +connected({call, From}, {unlock, GeneratedKey}, Data = #statem_data{connection_name = Conn}) -> + Ctx = unlock_context(Conn, Data), + case eetcd_lock:unlock(Ctx, GeneratedKey) of + {ok, _} -> + rabbit_log:debug("etcd peer discovery: successfully released lock, lock owner key: ~s", [GeneratedKey]), + reply_and_retain_state(From, ok); + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to release registration lock, lock owner key: ~s, error ~p", + [GeneratedKey, Error]), + reply_and_retain_state(From, Error) + end; +connected({call, From}, register, Data = #statem_data{connection_name = Conn}) -> + Ctx = registration_context(Conn, Data), + Key = node_key(Data), + eetcd_kv:put(Ctx, Key, registration_value(Data)), + rabbit_log:debug("etcd peer discovery: put key ~p, done with registration", [Key]), + gen_statem:reply(From, ok), + keep_state_and_data; +connected({call, From}, unregister, Data = #statem_data{connection_name = Conn}) -> + unregister(Conn, Data), + gen_statem:reply(From, ok), + {keep_state, Data#statem_data{ + node_key_lease_id = undefined + }}; +connected({call, From}, list_keys, Data = #statem_data{connection_name = Conn}) -> + Prefix = node_key_base(Data), + C1 = eetcd_kv:new(Conn), + C2 = eetcd_kv:with_prefix(eetcd_kv:with_key(C1, Prefix)), + rabbit_log:debug("etcd peer discovery: will use prefix ~s to query for node keys", [Prefix]), + {ok, #{kvs := Result}} = eetcd_kv:get(C2), + rabbit_log:debug("etcd peer discovery returned keys: ~p", [Result]), + Values = [maps:get(value, M) || M <- Result], + case Values of + Xs when is_list(Xs) -> + rabbit_log:debug("etcd peer discovery: listing node keys returned ~b results", [length(Xs)]), + ParsedNodes = lists:map(fun extract_node/1, Xs), + {Successes, Failures} = lists:partition(fun filter_node/1, ParsedNodes), + JoinedString = lists:join(",", [rabbit_data_coercion:to_list(Node) || Node <- lists:usort(Successes)]), + rabbit_log:error("etcd peer discovery: successfully extracted nodes: ~s", [JoinedString]), + lists:foreach(fun(Val) -> + rabbit_log:error("etcd peer discovery: failed to extract node name from etcd value ~p", [Val]) + end, Failures), + gen_statem:reply(From, lists:usort(Successes)), + keep_state_and_data; + Other -> + rabbit_log:debug("etcd peer discovery: listing node keys returned ~p", [Other]), + gen_statem:reply(From, []), + keep_state_and_data + end. + +disconnected(enter, _PrevState, _Data) -> + rabbit_log:info("etcd peer discovery: successfully disconnected from etcd"), + keep_state_and_data. + + +%% +%% Implementation +%% + +acquire_node_key_lease_grant(Data = #statem_data{connection_name = Name, node_key_ttl_in_seconds = TTL}) -> + %% acquire a lease for TTL + {ok, #{'ID' := LeaseID}} = eetcd_lease:grant(Name, TTL), + {ok, KeepalivePid} = eetcd_lease:keep_alive(Name, LeaseID), + rabbit_log:debug("etcd peer discovery: acquired a lease ~p for node key ~s with TTL = ~p", [LeaseID, node_key(Data), TTL]), + Data#statem_data{ + node_key_lease_id = LeaseID, + node_lease_keepalive_pid = KeepalivePid + }. + +registration_context(ConnName, #statem_data{node_key_lease_id = LeaseID}) -> + Ctx1 = eetcd_kv:new(ConnName), + eetcd_kv:with_lease(Ctx1, LeaseID). + +unregistration_context(ConnName, _Data) -> + eetcd_kv:new(ConnName). + +lock_context(ConnName, #statem_data{lock_ttl_in_seconds = LeaseTTL}) -> + %% LeaseTT is in seconds, eetcd_lock:with_timeout/2 expects milliseconds + eetcd_lock:with_timeout(eetcd_lock:new(ConnName), LeaseTTL * 1000). + +unlock_context(ConnName, #statem_data{lock_ttl_in_seconds = Timeout}) -> + %% caps the timeout here using the lock TTL value, it makes more + %% sense than picking an arbitrary number. MK. + eetcd_lock:with_timeout(eetcd_lock:new(ConnName), Timeout * 1000). + +node_key_base(#statem_data{cluster_name = ClusterName, key_prefix = Prefix}) -> + to_binary(rabbit_misc:format("/rabbitmq/discovery/~s/clusters/~s/nodes", [Prefix, ClusterName])). + +node_key(Data) -> + to_binary(rabbit_misc:format("~s/~s", [node_key_base(Data), node()])). + +lock_key_base(#statem_data{key_prefix = Prefix, cluster_name = ClusterName}) -> + Key = rabbit_misc:format("/rabbitmq/locks/~s/clusters/~s/registration", + [Prefix, ClusterName]), + to_binary(Key). + +%% This value is not used and merely +%% provides additional context to the operator. +registration_value(#statem_data{node_key_lease_id = LeaseID, node_key_ttl_in_seconds = TTL}) -> + to_binary(rabbit_json:encode(#{ + <<"node">> => to_binary(node()), + <<"lease_id">> => LeaseID, + <<"ttl">> => TTL + })). + +-spec extract_node(binary()) -> atom() | {error, any()}. + +extract_node(Payload) -> + case rabbit_json:decode(Payload) of + {error, Error} -> {error, Error}; + Map -> + case maps:get(<<"node">>, Map, undefined) of + undefined -> undefined; + Node -> rabbit_data_coercion:to_atom(Node) + end + end. + +filter_node(undefined) -> false; +filter_node({error, _}) -> false; +filter_node(_Other) -> true. + + +error_is_already_started({_Endpoint, already_started}) -> + true; +error_is_already_started({_Endpoint, _}) -> + false. + +connect(Name, Endpoints, Transport, TransportOpts, Data) -> + case eetcd_conn:lookup(Name) of + {ok, Pid} when is_pid(Pid) -> + {ok, Pid}; + {error, eetcd_conn_unavailable} -> + do_connect(Name, Endpoints, Transport, TransportOpts, Data) + end. + +do_connect(Name, Endpoints, Transport, TransportOpts, Data = #statem_data{username = Username}) -> + case Username of + undefined -> rabbit_log:info("etcd peer discovery: will connect to etcd without authentication (no credentials configured)"); + _ -> rabbit_log:info("etcd peer discovery: will connect to etcd as user '~s'", [Username]) + end, + case eetcd:open(Name, Endpoints, connection_options(Data), Transport, TransportOpts) of + {ok, Pid} -> {ok, Pid}; + {error, Errors0} -> + Errors = case is_list(Errors0) of + true -> Errors0; + false -> [Errors0] + end, + rabbit_log:debug("etcd peer discovery: connection errors: ~p", + [Errors]), + rabbit_log:debug("etcd peer discovery: are all connection errors benign?: ~p", + [lists:all(fun error_is_already_started/1, Errors)]), + %% If all errors are already_started we can ignore them. + %% eetcd registers connections under a name + case lists:all(fun error_is_already_started/1, Errors) of + true -> + eetcd_conn:lookup(Name); + false -> + {error, Errors} + end + end. + +connection_options(#statem_data{username = Username, obfuscated_password = Password}) -> + SharedOpts = [{mode, random}], + case {Username, Password} of + {undefined, _} -> SharedOpts; + {_, undefined} -> SharedOpts; + {UVal, PVal} -> + [{name, UVal}, {password, to_list(deobfuscate(PVal))}] ++ SharedOpts + end. + + +obfuscate(undefined) -> undefined; +obfuscate(Password) -> + credentials_obfuscation:encrypt(to_binary(Password)). + +deobfuscate(undefined) -> undefined; +deobfuscate(Password) -> + credentials_obfuscation:decrypt(to_binary(Password)). + +disconnect(ConnName, #statem_data{connection_monitor = Ref}) -> + maybe_demonitor(Ref), + do_disconnect(ConnName). + +unregister(Conn, Data = #statem_data{node_key_lease_id = LeaseID, node_lease_keepalive_pid = KAPid}) -> + Ctx = unregistration_context(Conn, Data), + Key = node_key(Data), + eetcd_kv:delete(Ctx, Key), + rabbit_log:debug("etcd peer discovery: deleted key ~s, done with unregistration", [Key]), + eetcd_lease:revoke(Ctx, LeaseID), + exit(KAPid, normal), + rabbit_log:debug("etcd peer discovery: revoked a lease ~p for node key ~s", [LeaseID, Key]), + ok. + +reply_and_retain_state(From, Value) -> + gen_statem:reply(From, Value), + keep_state_and_data. + +maybe_demonitor(undefined) -> + true; +maybe_demonitor(Ref) when is_reference(Ref) -> + erlang:demonitor(Ref). + +reset_statem_data(Data0 = #statem_data{endpoints = Es, connection_monitor = Ref}) when Es =/= undefined -> + maybe_demonitor(Ref), + Data0#statem_data{ + connection_pid = undefined, + connection_monitor = undefined + }. + +ensure_disconnected(Name, #statem_data{connection_monitor = Ref}) -> + maybe_demonitor(Ref), + do_disconnect(Name). + +do_disconnect(Name) -> + try + eetcd:close(Name) + catch _:_ -> + ok + end. + +reconnection_interval() -> + 3000. + +normalize_settings(Map) when is_map(Map) -> + Endpoints = maps:get(endpoints, Map, []), + LegacyEndpoints = case maps:get(etcd_host, Map, undefined) of + undefined -> []; + Hostname -> + Port = maps:get(etcd_port, Map, 2379), + [rabbit_misc:format("~s:~p", [Hostname, Port])] + end, + + AllEndpoints = Endpoints ++ LegacyEndpoints, + maps:merge(maps:without([etcd_prefix, etcd_node_ttl, lock_wait_time], Map), + #{endpoints => AllEndpoints}). + +pick_transport(#statem_data{tls_options = []}) -> + {tcp, []}; +pick_transport(#statem_data{tls_options = Opts}) -> + {tls, Opts}. diff --git a/deps/rabbitmq_peer_discovery_k8s/erlang.mk b/deps/rabbitmq_peer_discovery_k8s/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_peer_discovery_k8s/erlang.mk +++ b/deps/rabbitmq_peer_discovery_k8s/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_prelaunch/Makefile b/deps/rabbitmq_prelaunch/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..572f7703d47a2c3da9f585699797a5ce88810e38 --- /dev/null +++ b/deps/rabbitmq_prelaunch/Makefile @@ -0,0 +1,11 @@ +PROJECT = rabbitmq_prelaunch +PROJECT_DESCRIPTION = RabbitMQ prelaunch setup +PROJECT_VERSION = 1.0.0 +PROJECT_MOD = rabbit_prelaunch_app + +DEPS = rabbit_common lager + +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk + +include ../../rabbitmq-components.mk +include ../../erlang.mk diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl new file mode 100644 index 0000000000000000000000000000000000000000..9adcc92e0e7c3f21cec72623015eee3ccab447f7 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl @@ -0,0 +1,84 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2019-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state). + +-include_lib("eunit/include/eunit.hrl"). + +-export([get/0, + set/1, + wait_for/2]). + +-define(PT_KEY_BOOT_STATE, {?MODULE, boot_state}). + +-type boot_state() :: 'stopped' | 'booting' | 'ready' | 'stopping'. + +-export_type([boot_state/0]). + +-spec get() -> boot_state(). +get() -> + persistent_term:get(?PT_KEY_BOOT_STATE, stopped). + +-spec set(boot_state()) -> ok. +set(BootState) -> + rabbit_log_prelaunch:debug("Change boot state to `~s`", [BootState]), + ?assert(is_valid(BootState)), + case BootState of + stopped -> persistent_term:erase(?PT_KEY_BOOT_STATE); + _ -> persistent_term:put(?PT_KEY_BOOT_STATE, BootState) + end, + rabbit_boot_state_sup:notify_boot_state_listeners(BootState). + +-spec wait_for(boot_state(), timeout()) -> ok | {error, timeout}. +wait_for(BootState, infinity) -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, infinity) + end; +wait_for(BootState, Timeout) + when is_integer(Timeout) andalso Timeout >= 0 -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, Timeout - Wait) + end; +wait_for(_, _) -> + {error, timeout}. + +boot_state_idx(stopped) -> 0; +boot_state_idx(booting) -> 1; +boot_state_idx(ready) -> 2; +boot_state_idx(stopping) -> 3. + +is_valid(BootState) -> + is_integer(boot_state_idx(BootState)). + +is_reached(TargetBootState) -> + is_reached(?MODULE:get(), TargetBootState). + +is_reached(CurrentBootState, CurrentBootState) -> + true; +is_reached(stopping, stopped) -> + false; +is_reached(_CurrentBootState, stopped) -> + true; +is_reached(stopped, _TargetBootState) -> + true; +is_reached(CurrentBootState, TargetBootState) -> + boot_state_idx(TargetBootState) =< boot_state_idx(CurrentBootState). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..44f421e543a7b92f3535c086d1bce80abfdbe0e8 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl @@ -0,0 +1,46 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_sup). +-behaviour(supervisor). + +-export([start_link/0, + init/1]). + +-export([notify_boot_state_listeners/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + SystemdSpec = #{id => rabbit_boot_state_systemd, + start => {rabbit_boot_state_systemd, start_link, []}, + restart => transient}, + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, + [SystemdSpec]}}. + +-spec notify_boot_state_listeners(rabbit_boot_state:boot_state()) -> ok. +notify_boot_state_listeners(BootState) -> + lists:foreach( + fun + ({_, Child, _, _}) when is_pid(Child) -> + gen_server:cast(Child, {notify_boot_state, BootState}); + (_) -> + ok + end, + supervisor:which_children(?MODULE)). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl new file mode 100644 index 0000000000000000000000000000000000000000..7a942745e7c2b1e28d4647dc9de44d1ccc610cde --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2015-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_systemd). + +-behaviour(gen_server). + +-export([start_link/0]). + +-export([init/1, + handle_call/3, + handle_cast/2, + terminate/2, + code_change/3]). + +-record(state, {mechanism, + sd_notify_module, + socket}). + +-define(LOG_PREFIX, "Boot state/systemd: "). + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + case os:type() of + {unix, _} -> + case code:load_file(sd_notify) of + {module, sd_notify} -> + {ok, #state{mechanism = legacy, + sd_notify_module = sd_notify}}; + {error, _} -> + case os:getenv("NOTIFY_SOCKET") of + false -> + ignore; + "" -> + ignore; + Socket -> + {ok, #state{mechanism = socat, + socket = Socket}} + end + end; + _ -> + ignore + end. + +handle_call(_Request, _From, State) -> + {noreply, State}. + +handle_cast({notify_boot_state, BootState}, State) -> + notify_boot_state(BootState, State), + {noreply, State}. + +terminate(normal, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%% Private + +notify_boot_state(ready = BootState, + #state{mechanism = legacy, sd_notify_module = SDNotify}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via native module)", + [BootState]), + sd_notify_legacy(SDNotify); +notify_boot_state(ready = BootState, + #state{mechanism = socat, socket = Socket}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via socat(1))", + [BootState]), + sd_notify_socat(Socket); +notify_boot_state(BootState, _) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "ignoring state `~s`", + [BootState]), + ok. + +sd_notify_message() -> + "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". + +sd_notify_legacy(SDNotify) -> + SDNotify:sd_notify(0, sd_notify_message()). + +%% socat(1) is the most portable way the sd_notify could be +%% implemented in erlang, without introducing some NIF. Currently the +%% following issues prevent us from implementing it in a more +%% reasonable way: +%% - systemd-notify(1) is unstable for non-root users +%% - erlang doesn't support unix domain sockets. +%% +%% Some details on how we ended with such a solution: +%% https://github.com/rabbitmq/rabbitmq-server/issues/664 +sd_notify_socat(Socket) -> + case sd_current_unit() of + {ok, Unit} -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemd unit for activation check: \"~s\"~n", + [Unit]), + sd_notify_socat(Socket, Unit); + _ -> + ok + end. + +sd_notify_socat(Socket, Unit) -> + try sd_open_port(Socket) of + Port -> + Port ! {self(), {command, sd_notify_message()}}, + Result = sd_wait_activation(Port, Unit), + port_close(Port), + Result + catch + Class:Reason -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "Failed to start socat(1): ~p:~p~n", + [Class, Reason]), + false + end. + +sd_current_unit() -> + CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), + Ret = (catch re:run(CmdOut, + "([-.@0-9a-zA-Z]+)", + [unicode, {capture, all_but_first, list}])), + case Ret of + {'EXIT', _} -> error; + {match, [Unit]} -> {ok, Unit}; + _ -> error + end. + +socat_socket_arg("@" ++ AbstractUnixSocket) -> + "abstract-sendto:" ++ AbstractUnixSocket; +socat_socket_arg(UnixSocket) -> + "unix-sendto:" ++ UnixSocket. + +sd_open_port(Socket) -> + open_port( + {spawn_executable, os:find_executable("socat")}, + [{args, [socat_socket_arg(Socket), "STDIO"]}, + use_stdio, out]). + +sd_wait_activation(Port, Unit) -> + case os:find_executable("systemctl") of + false -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemctl(1) unavailable, falling back to sleep~n"), + timer:sleep(5000), + ok; + _ -> + sd_wait_activation(Port, Unit, 10) + end. + +sd_wait_activation(_, _, 0) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "service still in 'activating' state, bailing out~n"), + ok; +sd_wait_activation(Port, Unit, AttemptsLeft) -> + Ret = os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'"), + case Ret of + "ActiveState=activating\n" -> + timer:sleep(1000), + sd_wait_activation(Port, Unit, AttemptsLeft - 1); + "ActiveState=" ++ _ -> + ok; + _ = Err -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "unexpected status from systemd: ~p~n", [Err]), + ok + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl new file mode 100644 index 0000000000000000000000000000000000000000..ef15f47a750e4769ce515755960a464f6a67c8f8 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl @@ -0,0 +1,228 @@ +-module(rabbit_prelaunch). + +-include_lib("eunit/include/eunit.hrl"). + +-export([run_prelaunch_first_phase/0, + assert_mnesia_is_stopped/0, + get_context/0, + get_stop_reason/0, + set_stop_reason/1, + clear_stop_reason/0, + is_initial_pass/0, + initial_pass_finished/0, + shutdown_func/1]). + +-ifdef(TEST). +-export([store_context/1, + clear_context_cache/0]). +-endif. + +-define(PT_KEY_CONTEXT, {?MODULE, context}). +-define(PT_KEY_INITIAL_PASS, {?MODULE, initial_pass_finished}). +-define(PT_KEY_SHUTDOWN_FUNC, {?MODULE, chained_shutdown_func}). +-define(PT_KEY_STOP_REASON, {?MODULE, stop_reason}). + +run_prelaunch_first_phase() -> + try + do_run() + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error + end. + +do_run() -> + %% Indicate RabbitMQ is booting. + clear_stop_reason(), + rabbit_boot_state:set(booting), + + %% Configure dbg if requested. + rabbit_prelaunch_early_logging:enable_quick_dbg(rabbit_env:dbg_config()), + + %% Setup signal handler. + ok = rabbit_prelaunch_sighandler:setup(), + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. + %% + %% We need this because our cluster consistency check (in the second + %% phase) depends on Mnesia not being started before it has a chance + %% to run. + %% + %% Also, in the initial pass, we don't want Mnesia to run before + %% Erlang distribution is configured. + assert_mnesia_is_stopped(), + + %% Get informations to setup logging. + Context0 = rabbit_env:get_context_before_logging_init(), + ?assertMatch(#{}, Context0), + + %% Setup logging for the prelaunch phase. + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context0, true), + + IsInitialPass = is_initial_pass(), + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [1/2] (initial pass) =="), + rabbit_log_prelaunch:debug(""); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [1/2] =="), + rabbit_log_prelaunch:debug("") + end, + rabbit_env:log_process_env(), + + %% Load rabbitmq-env.conf, redo logging setup and continue. + Context1 = rabbit_env:get_context_after_logging_init(Context0), + ?assertMatch(#{}, Context1), + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context1, true), + rabbit_env:log_process_env(), + + %% Complete context now that we have the final environment loaded. + Context2 = rabbit_env:get_context_after_reloading_env(Context1), + ?assertMatch(#{}, Context2), + store_context(Context2), + rabbit_env:log_context(Context2), + ok = setup_shutdown_func(), + + Context = Context2#{initial_pass => IsInitialPass}, + + rabbit_env:context_to_code_path(Context), + rabbit_env:context_to_app_env_vars(Context), + + %% 1. Erlang/OTP compatibility check. + ok = rabbit_prelaunch_erlang_compat:check(Context), + + %% 2. Erlang distribution check + start. + ok = rabbit_prelaunch_dist:setup(Context), + + %% 3. Configuration check + loading. + ok = rabbit_prelaunch_conf:setup(Context), + + %% 4. Write PID file. + rabbit_log_prelaunch:debug(""), + _ = write_pid_file(Context), + ignore. + +assert_mnesia_is_stopped() -> + ?assertNot(lists:keymember(mnesia, 1, application:which_applications())). + +store_context(Context) when is_map(Context) -> + persistent_term:put(?PT_KEY_CONTEXT, Context). + +get_context() -> + case persistent_term:get(?PT_KEY_CONTEXT, undefined) of + undefined -> undefined; + Context -> Context#{initial_pass => is_initial_pass()} + end. + +-ifdef(TEST). +clear_context_cache() -> + persistent_term:erase(?PT_KEY_CONTEXT). +-endif. + +get_stop_reason() -> + persistent_term:get(?PT_KEY_STOP_REASON, undefined). + +set_stop_reason(Reason) -> + case get_stop_reason() of + undefined -> + rabbit_log_prelaunch:debug("Set stop reason to: ~p", [Reason]), + persistent_term:put(?PT_KEY_STOP_REASON, Reason); + _ -> + ok + end. + +clear_stop_reason() -> + persistent_term:erase(?PT_KEY_STOP_REASON). + +is_initial_pass() -> + not persistent_term:get(?PT_KEY_INITIAL_PASS, false). + +initial_pass_finished() -> + persistent_term:put(?PT_KEY_INITIAL_PASS, true). + +setup_shutdown_func() -> + ThisMod = ?MODULE, + ThisFunc = shutdown_func, + ExistingShutdownFunc = application:get_env(kernel, shutdown_func), + case ExistingShutdownFunc of + {ok, {ThisMod, ThisFunc}} -> + ok; + {ok, {ExistingMod, ExistingFunc}} -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1 " + "(chained with ~s:~s/1)", + [ThisMod, ThisFunc, ExistingMod, ExistingFunc]), + ok = persistent_term:put( + ?PT_KEY_SHUTDOWN_FUNC, + ExistingShutdownFunc), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc); + _ -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1", + [ThisMod, ThisFunc]), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc) + end. + +record_kernel_shutdown_func(Mod, Func) -> + application:set_env( + kernel, shutdown_func, {Mod, Func}, + [{persistent, true}]). + +shutdown_func(Reason) -> + rabbit_log_prelaunch:debug( + "Running ~s:shutdown_func() as part of `kernel` shutdown", [?MODULE]), + Context = get_context(), + remove_pid_file(Context), + ChainedShutdownFunc = persistent_term:get( + ?PT_KEY_SHUTDOWN_FUNC, + undefined), + case ChainedShutdownFunc of + {ChainedMod, ChainedFunc} -> ChainedMod:ChainedFunc(Reason); + _ -> ok + end. + +write_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Writing PID file: ~s", [PidFile]), + case filelib:ensure_dir(PidFile) of + ok -> + OSPid = os:getpid(), + case file:write_file(PidFile, OSPid) of + ok -> + ok; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to write PID file \"~s\": ~s", + [PidFile, file:format_error(Reason)]), + Error + end; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to create PID file \"~s\" directory: ~s", + [PidFile, file:format_error(Reason)]), + Error + end; +write_pid_file(_) -> + ok. + +remove_pid_file(#{pid_file := PidFile, keep_pid_file_on_exit := true}) -> + rabbit_log_prelaunch:debug("Keeping PID file: ~s", [PidFile]), + ok; +remove_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Deleting PID file: ~s", [PidFile]), + _ = file:delete(PidFile), + ok; +remove_pid_file(_) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl new file mode 100644 index 0000000000000000000000000000000000000000..cef7f05e772097ac61b341793bae523089151dac --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl @@ -0,0 +1,11 @@ +-module(rabbit_prelaunch_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + rabbit_prelaunch_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl new file mode 100644 index 0000000000000000000000000000000000000000..d2409f0d0bb671597cdd3a3d773c5f279bf02b09 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -0,0 +1,503 @@ +-module(rabbit_prelaunch_conf). + +-include_lib("kernel/include/file.hrl"). +-include_lib("stdlib/include/zip.hrl"). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1, + get_config_state/0, + generate_config_from_cuttlefish_files/3, + decrypt_config/1]). + +-ifdef(TEST). +-export([decrypt_config/2]). +-endif. + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Configuration =="), + + %% TODO: Check if directories/files are inside Mnesia dir. + + ok = set_default_config(), + + AdditionalConfigFiles = find_additional_config_files(Context), + AdvancedConfigFile = find_actual_advanced_config_file(Context), + State = case find_actual_main_config_file(Context) of + {MainConfigFile, erlang} -> + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + MainConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => MainConfigFile}; + {MainConfigFile, cuttlefish} -> + ConfigFiles = [MainConfigFile | AdditionalConfigFiles], + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdditionalConfigFiles =/= [] -> + ConfigFiles = AdditionalConfigFiles, + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdvancedConfigFile =/= undefined -> + rabbit_log_prelaunch:warning( + "Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s", + [AdvancedConfigFile]), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined -> + #{config_files => [], + config_advanced_file => undefined} + end, + ok = override_with_hard_coded_critical_config(), + ok = set_credentials_obfuscation_secret(), + rabbit_log_prelaunch:debug( + "Saving config state to application env: ~p", [State]), + store_config_state(State). + +store_config_state(ConfigState) -> + persistent_term:put({rabbitmq_prelaunch, config_state}, ConfigState). + +get_config_state() -> + persistent_term:get({rabbitmq_prelaunch, config_state}, undefined). + +%% ------------------------------------------------------------------- +%% Configuration loading. +%% ------------------------------------------------------------------- + +set_default_config() -> + rabbit_log_prelaunch:debug("Setting default config"), + Config = [ + {ra, + [ + {wal_max_size_bytes, 536870912}, %% 5 * 2 ^ 20 + {wal_max_batch_size, 4096} + ]}, + {sysmon_handler, + [{process_limit, 100}, + {port_limit, 100}, + {gc_ms_limit, 0}, + {schedule_ms_limit, 0}, + {heap_word_limit, 0}, + {busy_port, false}, + {busy_dist_port, true}]} + ], + apply_erlang_term_based_config(Config). + +find_actual_main_config_file(#{main_config_file := File}) -> + case filelib:is_regular(File) of + true -> + Format = case filename:extension(File) of + ".conf" -> cuttlefish; + ".config" -> erlang; + _ -> determine_config_format(File) + end, + {File, Format}; + false -> + OldFormatFile = File ++ ".config", + NewFormatFile = File ++ ".conf", + case filelib:is_regular(OldFormatFile) of + true -> + case filelib:is_regular(NewFormatFile) of + true -> + rabbit_log_prelaunch:warning( + "Both old (.config) and new (.conf) format config " + "files exist."), + rabbit_log_prelaunch:warning( + "Using the old format config file: ~s", + [OldFormatFile]), + rabbit_log_prelaunch:warning( + "Please update your config files to the new format " + "and remove the old file."), + ok; + false -> + ok + end, + {OldFormatFile, erlang}; + false -> + case filelib:is_regular(NewFormatFile) of + true -> {NewFormatFile, cuttlefish}; + false -> undefined + end + end + end. + +find_additional_config_files(#{additional_config_files := Pattern}) + when Pattern =/= undefined -> + Pattern1 = case filelib:is_dir(Pattern) of + true -> filename:join(Pattern, "*"); + false -> Pattern + end, + OnlyFiles = [File || + File <- filelib:wildcard(Pattern1), + filelib:is_regular(File)], + lists:sort(OnlyFiles); +find_additional_config_files(_) -> + []. + +find_actual_advanced_config_file(#{advanced_config_file := File}) -> + case filelib:is_regular(File) of + true -> File; + false -> undefined + end. + +determine_config_format(File) -> + case filelib:file_size(File) of + 0 -> + cuttlefish; + _ -> + case file:consult(File) of + {ok, _} -> erlang; + _ -> cuttlefish + end + end. + +load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile) -> + Config = generate_config_from_cuttlefish_files( + Context, ConfigFiles, AdvancedConfigFile), + apply_erlang_term_based_config(Config), + Config. + +generate_config_from_cuttlefish_files(Context, + ConfigFiles, + AdvancedConfigFile) -> + %% Load schemas. + SchemaFiles = find_cuttlefish_schemas(Context), + case SchemaFiles of + [] -> + rabbit_log_prelaunch:error( + "No configuration schema found~n", []), + throw({error, no_configuration_schema_found}); + _ -> + rabbit_log_prelaunch:debug( + "Configuration schemas found:~n", []), + lists:foreach( + fun(SchemaFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [SchemaFile]) + end, + SchemaFiles), + ok + end, + Schema = cuttlefish_schema:files(SchemaFiles), + + %% Load configuration. + rabbit_log_prelaunch:debug( + "Loading configuration files (Cuttlefish based):"), + lists:foreach( + fun(ConfigFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [ConfigFile]) + end, ConfigFiles), + case cuttlefish_conf:files(ConfigFiles) of + {errorlist, Errors} -> + rabbit_log_prelaunch:error("Error parsing configuration:"), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)]) + end, Errors), + rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"), + throw({error, failed_to_parse_configuration_file}); + Config0 -> + %% Finalize configuration, based on the schema. + Config = case cuttlefish_generator:map(Schema, Config0) of + {error, Phase, {errorlist, Errors}} -> + %% TODO + rabbit_log_prelaunch:error( + "Error preparing configuration in phase ~ts:", + [Phase]), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error( + " - ~ts", + [cuttlefish_error:xlate(Error)]) + end, Errors), + throw( + {error, failed_to_prepare_configuration}); + ValidConfig -> + proplists:delete(vm_args, ValidConfig) + end, + + %% Apply advanced configuration overrides, if any. + override_with_advanced_config(Config, AdvancedConfigFile) + end. + +find_cuttlefish_schemas(Context) -> + Apps = list_apps(Context), + rabbit_log_prelaunch:debug( + "Looking up configuration schemas in the following applications:"), + find_cuttlefish_schemas(Apps, []). + +find_cuttlefish_schemas([App | Rest], AllSchemas) -> + Schemas = list_schemas_in_app(App), + find_cuttlefish_schemas(Rest, AllSchemas ++ Schemas); +find_cuttlefish_schemas([], AllSchemas) -> + lists:sort(fun(A,B) -> A < B end, AllSchemas). + +list_apps(#{os_type := {win32, _}, plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ";"), + list_apps1(PluginsDirs, []); +list_apps(#{plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ":"), + list_apps1(PluginsDirs, []). + + +list_apps1([Dir | Rest], Apps) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + NewApps = [list_to_atom( + hd( + string:split(filename:basename(F, ".ex"), "-"))) + || F <- Filenames], + Apps1 = lists:umerge(Apps, lists:sort(NewApps)), + list_apps1(Rest, Apps1); + {error, Reason} -> + rabbit_log_prelaunch:debug( + "Failed to list directory \"~ts\" content: ~ts", + [Dir, file:format_error(Reason)]), + list_apps1(Rest, Apps) + end; +list_apps1([], AppInfos) -> + AppInfos. + +list_schemas_in_app(App) -> + {Loaded, Unload} = case application:load(App) of + ok -> {true, true}; + {error, {already_loaded, _}} -> {true, false}; + {error, _} -> {false, false} + end, + List = case Loaded of + true -> + case code:priv_dir(App) of + {error, bad_name} -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable priv dir)", [App]), + []; + PrivDir -> + SchemaDir = filename:join([PrivDir, "schema"]), + do_list_schemas_in_app(App, SchemaDir) + end; + false -> + rabbit_log_prelaunch:debug( + " [ ] ~s (failed to load application)", [App]), + [] + end, + case Unload of + true -> _ = application:unload(App), + ok; + false -> ok + end, + List. + +do_list_schemas_in_app(App, SchemaDir) -> + case erl_prim_loader:list_dir(SchemaDir) of + {ok, Files} -> + rabbit_log_prelaunch:debug(" [x] ~s", [App]), + [filename:join(SchemaDir, File) + || [C | _] = File <- Files, + C =/= $.]; + error -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable schema dir)", [App]), + [] + end. + +override_with_advanced_config(Config, undefined) -> + Config; +override_with_advanced_config(Config, AdvancedConfigFile) -> + rabbit_log_prelaunch:debug( + "Override with advanced configuration file \"~ts\"", + [AdvancedConfigFile]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(Config, AdvancedConfig); + {ok, OtherTerms} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\", " + "incorrect format: ~p", + [AdvancedConfigFile, OtherTerms]), + throw({error, failed_to_parse_advanced_configuration_file}); + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\": ~ts", + [AdvancedConfigFile, file:format_error(Reason)]), + throw({error, failed_to_read_advanced_configuration_file}) + end. + +override_with_hard_coded_critical_config() -> + rabbit_log_prelaunch:debug("Override with hard-coded critical config"), + Config = [ + {ra, + %% Make Ra use a custom logger that dispatches to lager + %% instead of the default OTP logger + [{logger_module, rabbit_log_ra_shim}]} + ], + apply_erlang_term_based_config(Config). + +apply_erlang_term_based_config([{_, []} | Rest]) -> + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([{App, Vars} | Rest]) -> + rabbit_log_prelaunch:debug(" Applying configuration for '~s':", [App]), + ok = apply_app_env_vars(App, Vars), + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([]) -> + ok. + +apply_app_env_vars(App, [{Var, Value} | Rest]) -> + rabbit_log_prelaunch:debug( + " - ~s = ~p", + [Var, Value]), + ok = application:set_env(App, Var, Value, [{persistent, true}]), + apply_app_env_vars(App, Rest); +apply_app_env_vars(_, []) -> + ok. + +set_credentials_obfuscation_secret() -> + rabbit_log_prelaunch:debug("Refreshing credentials obfuscation configuration from env: ~p", + [application:get_all_env(credentials_obfuscation)]), + ok = credentials_obfuscation:refresh_config(), + CookieBin = rabbit_data_coercion:to_binary(erlang:get_cookie()), + rabbit_log_prelaunch:debug( + "Setting credentials obfuscation secret to '~s'", [CookieBin]), + ok = credentials_obfuscation:set_secret(CookieBin). + +%% ------------------------------------------------------------------- +%% Config decryption. +%% ------------------------------------------------------------------- + +decrypt_config(Apps) -> + rabbit_log_prelaunch:debug("Decoding encrypted config values (if any)"), + ConfigEntryDecoder = application:get_env(rabbit, config_entry_decoder, []), + decrypt_config(Apps, ConfigEntryDecoder). + +decrypt_config([], _) -> + ok; +decrypt_config([App | Apps], Algo) -> + Algo1 = decrypt_app(App, application:get_all_env(App), Algo), + decrypt_config(Apps, Algo1). + +decrypt_app(_, [], Algo) -> + Algo; +decrypt_app(App, [{Key, Value} | Tail], Algo) -> + Algo2 = try + case decrypt(Value, Algo) of + {Value, Algo1} -> + Algo1; + {NewValue, Algo1} -> + rabbit_log_prelaunch:debug( + "Value of `~s` decrypted", [Key]), + ok = application:set_env(App, Key, NewValue, + [{persistent, true}]), + Algo1 + end + catch + throw:{bad_config_entry_decoder, _} = Error -> + throw(Error); + _:Msg -> + throw({config_decryption_error, {key, Key}, Msg}) + end, + decrypt_app(App, Tail, Algo2). + +decrypt({encrypted, _}=EncValue, {Cipher, Hash, Iterations, PassPhrase} = Algo) -> + {rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, EncValue), Algo}; +decrypt({encrypted, _}=EncValue, + ConfigEntryDecoder) + when is_list(ConfigEntryDecoder) -> + Algo = config_entry_decoder_to_algo(ConfigEntryDecoder), + decrypt(EncValue, Algo); +decrypt(List, Algo) when is_list(List) -> + decrypt_list(List, Algo, []); +decrypt(Value, Algo) -> + {Value, Algo}. + +%% We make no distinction between strings and other lists. +%% When we receive a string, we loop through each element +%% and ultimately return the string unmodified, as intended. +decrypt_list([], Algo, Acc) -> + {lists:reverse(Acc), Algo}; +decrypt_list([{Key, Value} | Tail], Algo, Acc) + when Key =/= encrypted -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [{Key, Value1} | Acc]); +decrypt_list([Value | Tail], Algo, Acc) -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [Value1 | Acc]). + +config_entry_decoder_to_algo(ConfigEntryDecoder) -> + case get_passphrase(ConfigEntryDecoder) of + undefined -> + throw({bad_config_entry_decoder, missing_passphrase}); + PassPhrase -> + { + proplists:get_value( + cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), + proplists:get_value( + hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), + proplists:get_value( + iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), + PassPhrase + } + end. + +get_passphrase(ConfigEntryDecoder) -> + rabbit_log_prelaunch:debug("Getting encrypted config passphrase"), + case proplists:get_value(passphrase, ConfigEntryDecoder) of + prompt -> + IoDevice = get_input_iodevice(), + ok = io:setopts(IoDevice, [{echo, false}]), + PP = lists:droplast(io:get_line(IoDevice, + "\nPlease enter the passphrase to unlock encrypted " + "configuration entries.\n\nPassphrase: ")), + ok = io:setopts(IoDevice, [{echo, true}]), + io:format(IoDevice, "~n", []), + PP; + {file, Filename} -> + {ok, File} = file:read_file(Filename), + [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), + PP; + PP -> + PP + end. + +%% This function retrieves the correct IoDevice for requesting +%% input. The problem with using the default IoDevice is that +%% the Erlang shell prevents us from getting the input. +%% +%% Instead we therefore look for the io process used by the +%% shell and if it can't be found (because the shell is not +%% started e.g with -noshell) we use the 'user' process. +%% +%% This function will not work when either -oldshell or -noinput +%% options are passed to erl. +get_input_iodevice() -> + case whereis(user) of + undefined -> + user; + User -> + case group:interfaces(User) of + [] -> + user; + [{user_drv, Drv}] -> + case user_drv:interfaces(Drv) of + [] -> user; + [{current_group, IoDevice}] -> IoDevice + end + end + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl new file mode 100644 index 0000000000000000000000000000000000000000..3d718438a7379b71e47f5a343781f64e4fbd0703 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl @@ -0,0 +1,104 @@ +-module(rabbit_prelaunch_dist). + +-export([setup/1]). + +setup(#{nodename := Node, nodename_type := NameType} = Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang distribution =="), + rabbit_log_prelaunch:debug("Rqeuested node name: ~s (type: ~s)", + [Node, NameType]), + case node() of + nonode@nohost -> + ok = rabbit_nodes_common:ensure_epmd(), + ok = dist_port_range_check(Context), + ok = dist_port_use_check(Context), + ok = duplicate_node_check(Context), + + ok = do_setup(Context); + Node -> + rabbit_log_prelaunch:debug( + "Erlang distribution already running", []), + ok; + Unexpected -> + throw({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) + end, + ok. + +do_setup(#{nodename := Node, nodename_type := NameType}) -> + rabbit_log_prelaunch:debug("Starting Erlang distribution", []), + case application:get_env(kernel, net_ticktime) of + {ok, Ticktime} when is_integer(Ticktime) andalso Ticktime >= 1 -> + %% The value passed to net_kernel:start/1 is the + %% "minimum transition traffic interval" as defined in + %% net_kernel:set_net_ticktime/1. + MTTI = Ticktime * 1000 div 4, + {ok, _} = net_kernel:start([Node, NameType, MTTI]), + ok; + _ -> + {ok, _} = net_kernel:start([Node, NameType]), + ok + end, + ok. + +%% Check whether a node with the same name is already running +duplicate_node_check(#{split_nodename := {NodeName, NodeHost}}) -> + rabbit_log_prelaunch:debug( + "Checking if node name ~s is already used", [NodeName]), + PrelaunchName = rabbit_nodes_common:make( + {NodeName ++ "_prelaunch_" ++ os:getpid(), + "localhost"}), + {ok, _} = net_kernel:start([PrelaunchName, shortnames]), + case rabbit_nodes_common:names(NodeHost) of + {ok, NamePorts} -> + case proplists:is_defined(NodeName, NamePorts) of + true -> + throw({error, {duplicate_node_name, NodeName, NodeHost}}); + false -> + ok = net_kernel:stop(), + ok + end; + {error, EpmdReason} -> + throw({error, {epmd_error, NodeHost, EpmdReason}}) + end. + +dist_port_range_check(#{erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is valid", [DistTcpPort]), + case DistTcpPort of + _ when DistTcpPort < 1 orelse DistTcpPort > 65535 -> + throw({error, {invalid_dist_port_range, DistTcpPort}}); + _ -> + ok + end. + +dist_port_use_check(#{split_nodename := {_, NodeHost}, + erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is available", [DistTcpPort]), + dist_port_use_check_ipv4(NodeHost, DistTcpPort). + +dist_port_use_check_ipv4(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +dist_port_use_check_ipv6(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +-spec dist_port_use_check_fail(non_neg_integer(), string()) -> + no_return(). + +dist_port_use_check_fail(Port, Host) -> + {ok, Names} = rabbit_nodes_common:names(Host), + case [N || {N, P} <- Names, P =:= Port] of + [] -> + throw({error, {dist_port_already_used, Port, not_erlang, Host}}); + [Name] -> + throw({error, {dist_port_already_used, Port, Name, Host}}) + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl new file mode 100644 index 0000000000000000000000000000000000000000..431422276fe50e22c72c11aeb48cec5ba06362ea --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl @@ -0,0 +1,109 @@ +-module(rabbit_prelaunch_early_logging). + +-include_lib("rabbit_common/include/rabbit_log.hrl"). + +-export([setup_early_logging/2, + enable_quick_dbg/1, + use_colored_logging/0, + use_colored_logging/1, + list_expected_sinks/0]). + +setup_early_logging(#{log_levels := undefined} = Context, + LagerEventToStdout) -> + setup_early_logging(Context#{log_levels => get_default_log_level()}, + LagerEventToStdout); +setup_early_logging(Context, LagerEventToStdout) -> + Configured = lists:member( + lager_util:make_internal_sink_name(rabbit_log_prelaunch), + lager:list_all_sinks()), + case Configured of + true -> ok; + false -> do_setup_early_logging(Context, LagerEventToStdout) + end. + +get_default_log_level() -> + #{"prelaunch" => warning}. + +do_setup_early_logging(#{log_levels := LogLevels} = Context, + LagerEventToStdout) -> + Colored = use_colored_logging(Context), + application:set_env(lager, colored, Colored), + ConsoleBackend = lager_console_backend, + case LagerEventToStdout of + true -> + GLogLevel = case LogLevels of + #{global := Level} -> Level; + _ -> warning + end, + _ = lager_app:start_handler( + lager_event, ConsoleBackend, [{level, GLogLevel}]), + ok; + false -> + ok + end, + lists:foreach( + fun(Sink) -> + CLogLevel = get_log_level(LogLevels, Sink), + lager_app:configure_sink( + Sink, + [{handlers, [{ConsoleBackend, [{level, CLogLevel}]}]}]) + end, list_expected_sinks()), + ok. + +use_colored_logging() -> + use_colored_logging(rabbit_prelaunch:get_context()). + +use_colored_logging(#{log_levels := #{color := true}, + output_supports_colors := true}) -> + true; +use_colored_logging(_) -> + false. + +list_expected_sinks() -> + Key = {?MODULE, lager_extra_sinks}, + case persistent_term:get(Key, undefined) of + undefined -> + CompileOptions = proplists:get_value(options, + module_info(compile), + []), + AutoList = [lager_util:make_internal_sink_name(M) + || M <- proplists:get_value(lager_extra_sinks, + CompileOptions, [])], + List = case lists:member(?LAGER_SINK, AutoList) of + true -> AutoList; + false -> [?LAGER_SINK | AutoList] + end, + %% Store the list in the application environment. If this + %% module is later cover-compiled, the compile option will + %% be lost, so we will be able to retrieve the list from the + %% application environment. + persistent_term:put(Key, List), + List; + List -> + List + end. + +sink_to_category(Sink) when is_atom(Sink) -> + re:replace( + atom_to_list(Sink), + "^rabbit_log_(.+)_lager_event$", + "\\1", + [{return, list}]). + +get_log_level(LogLevels, Sink) -> + Category = sink_to_category(Sink), + case LogLevels of + #{Category := Level} -> Level; + #{global := Level} -> Level; + _ -> warning + end. + +enable_quick_dbg(#{dbg_output := Output, dbg_mods := Mods}) -> + case Output of + stdout -> {ok, _} = dbg:tracer(), + ok; + _ -> {ok, _} = dbg:tracer(port, dbg:trace_port(file, Output)), + ok + end, + {ok, _} = dbg:p(all, c), + lists:foreach(fun(M) -> {ok, _} = dbg:tp(M, cx) end, Mods). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl new file mode 100644 index 0000000000000000000000000000000000000000..1e8fe2690de077c6dad71e029937a442317a3dd0 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl @@ -0,0 +1,47 @@ +-module(rabbit_prelaunch_erlang_compat). + +-export([check/1]). + +-define(OTP_MINIMUM, "21.3"). +-define(ERTS_MINIMUM, "10.3"). + +check(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang/OTP compatibility check =="), + + ERTSVer = erlang:system_info(version), + OTPRel = rabbit_misc:otp_release(), + rabbit_log_prelaunch:debug( + "Requiring: Erlang/OTP ~s (ERTS ~s)", [?OTP_MINIMUM, ?ERTS_MINIMUM]), + rabbit_log_prelaunch:debug( + "Running: Erlang/OTP ~s (ERTS ~s)", [OTPRel, ERTSVer]), + + case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of + true when ?ERTS_MINIMUM =/= ERTSVer -> + rabbit_log_prelaunch:debug( + "Erlang/OTP version requirement satisfied"), + ok; + true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> + %% When a critical regression or bug is found, a new OTP + %% release can be published without changing the ERTS + %% version. For instance, this is the case with R16B03 and + %% R16B03-1. + %% + %% In this case, we compare the release versions + %% alphabetically. + ok; + _ -> + Msg = + "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " + "minimum required version is ~s (erts ~s)", + Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], + rabbit_log_prelaunch:error(Msg, Args), + + %% Also print to stderr to make this more visible + io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), + + Msg2 = rabbit_misc:format( + "Erlang ~s or later is required, started on ~s", + [?OTP_MINIMUM, OTPRel]), + throw({error, {erlang_version_too_old, Msg2}}) + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl new file mode 100644 index 0000000000000000000000000000000000000000..2a2eb2b7fdc860ef75dfba88db1d4879d64ee807 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl @@ -0,0 +1,112 @@ +-module(rabbit_prelaunch_errors). + +-export([format_error/1, + format_exception/3, + log_error/1, + log_exception/3]). + +-define(BOOT_FAILED_HEADER, + "\n" + "BOOT FAILED\n" + "===========\n"). + +-define(BOOT_FAILED_FOOTER, + "\n"). + +log_error(Error) -> + Message = format_error(Error), + log_message(Message). + +format_error({error, {duplicate_node_name, NodeName, NodeHost}}) -> + rabbit_misc:format( + "ERROR: node with name ~p already running on ~p", + [NodeName, NodeHost]); +format_error({error, {epmd_error, NodeHost, EpmdReason}}) -> + rabbit_misc:format( + "ERROR: epmd error for host ~s: ~s", + [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]); +format_error({error, {invalid_dist_port_range, DistTcpPort}}) -> + rabbit_misc:format( + "Invalid Erlang distribution TCP port: ~b", [DistTcpPort]); +format_error({error, {dist_port_already_used, Port, not_erlang, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use on ~s " + "(by non-Erlang process?)", [Port, Host]); +format_error({error, {dist_port_already_used, Port, Name, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use by ~s@~s", [Port, Name, Host]); +format_error({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) -> + rabbit_misc:format( + "Erlang distribution running with another node name (~s) " + "than the configured one (~s)", + [Unexpected, Node]); +format_error({bad_config_entry_decoder, missing_passphrase}) -> + rabbit_misc:format( + "Missing passphrase or missing passphrase read method in " + "`config_entry_decoder`", []); +format_error({config_decryption_error, {key, Key}, _Msg}) -> + rabbit_misc:format( + "Error while decrypting key '~p'. Please check encrypted value, " + "passphrase, and encryption configuration~n", + [Key]); +format_error({error, {timeout_waiting_for_tables, AllNodes, _}}) -> + Suffix = + "~nBACKGROUND~n==========~n~n" + "This cluster node was shut down while other nodes were still running.~n" + "To avoid losing data, you should start the other nodes first, then~n" + "start this one. To force this node to start, first invoke~n" + "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" + "cluster nodes after this one was shut down may be lost.", + {Message, Nodes} = + case AllNodes -- [node()] of + [] -> {rabbit_misc:format( + "Timeout contacting cluster nodes. Since RabbitMQ was" + " shut down forcefully~nit cannot determine which nodes" + " are timing out.~n" ++ Suffix, []), + []}; + Ns -> {rabbit_misc:format( + "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, + [Ns]), + Ns} + end, + Message ++ "\n" ++ rabbit_nodes_common:diagnostics(Nodes); +format_error({error, {cannot_log_to_file, unknown, Reason}}) -> + rabbit_misc:format( + "failed to initialised logger: ~p~n", + [Reason]); +format_error({error, {cannot_log_to_file, LogFile, + {cannot_create_parent_dirs, _, Reason}}}) -> + rabbit_misc:format( + "failed to create parent directory for log file at '~s', reason: ~s~n", + [LogFile, file:format_error(Reason)]); +format_error({error, {cannot_log_to_file, LogFile, Reason}}) -> + rabbit_misc:format( + "failed to open log file at '~s', reason: ~s", + [LogFile, file:format_error(Reason)]); +format_error(Error) -> + rabbit_misc:format("Error during startup: ~p", [Error]). + +log_exception(Class, Exception, Stacktrace) -> + Message = format_exception(Class, Exception, Stacktrace), + log_message(Message). + +format_exception(Class, Exception, Stacktrace) -> + rabbit_misc:format( + "Exception during startup:~n~s", + [lager:pr_stacktrace(Stacktrace, {Class, Exception})]). + +log_message(Message) -> + Lines = string:split( + ?BOOT_FAILED_HEADER ++ + Message ++ + ?BOOT_FAILED_FOOTER, + [$\n], + all), + lists:foreach( + fun(Line) -> + rabbit_log_prelaunch:error("~s", [Line]), + io:format(standard_error, "~s~n", [Line]) + end, Lines), + timer:sleep(1000), + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl new file mode 100644 index 0000000000000000000000000000000000000000..f9a60effda02cec9efdc0b3c1c7edf57d8dd85bf --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl @@ -0,0 +1,93 @@ +-module(rabbit_prelaunch_sighandler). +-behaviour(gen_event). + +-export([setup/0, + init/1, + handle_event/2, + handle_call/2, + handle_info/2, + terminate/2, + code_change/3]). + +%% CAUTION: Signal handling in this module must be kept consistent +%% with the same handling in rabbitmq-server(8). + +%% #{signal => default | ignore | stop}. +-define(SIGNALS_HANDLED_BY_US, + #{ + %% SIGHUP is often used to reload the configuration or reopen + %% log files after they were rotated. We don't support any + %% of those two cases, so ignore it for now, until we can do + %% something about it. + sighup => ignore, + + %% SIGTSTP is triggered by Ctrl+Z to pause a program. However + %% we can't handle SIGCONT, the signal used to resume the + %% program. Unfortunately, it makes a SIGTSTP handler less + %% useful here. + sigtstp => ignore + }). + +-define(SIGNAL_HANDLED_BY_ERLANG(Signal), + Signal =:= sigusr1 orelse + Signal =:= sigquit orelse + Signal =:= sigterm). + +-define(SERVER, erl_signal_server). + +setup() -> + case os:type() of + {unix, _} -> + case whereis(?SERVER) of + undefined -> + ok; + _ -> + case lists:member(?MODULE, gen_event:which_handlers(?SERVER)) of + true -> ok; + false -> gen_event:add_handler(?SERVER, ?MODULE, []) + end + end; + _ -> + ok + end. + +init(_Args) -> + maps:fold( + fun + (Signal, _, Ret) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> Ret; + (Signal, default, ok) -> os:set_signal(Signal, default); + (Signal, ignore, ok) -> os:set_signal(Signal, ignore); + (Signal, _, ok) -> os:set_signal(Signal, handle) + end, ok, ?SIGNALS_HANDLED_BY_US), + {ok, #{}}. + +handle_event(Signal, State) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> + {ok, State}; +handle_event(Signal, State) -> + case ?SIGNALS_HANDLED_BY_US of + %% The code below can be uncommented if we introduce a signal + %% which should stop RabbitMQ. + % + %#{Signal := stop} -> + % error_logger:info_msg( + % "~s received - shutting down~n", + % [string:uppercase(atom_to_list(Signal))]), + % ok = init:stop(); + _ -> + error_logger:info_msg( + "~s received - unhandled signal~n", + [string:uppercase(atom_to_list(Signal))]) + end, + {ok, State}. + +handle_info(_, State) -> + {ok, State}. + +handle_call(_, State) -> + {ok, ok, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Args, _State) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl new file mode 100644 index 0000000000000000000000000000000000000000..9fd117d9f3aa939e21c33d1c412adb765f2fd122 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_sup). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + BootStateSup = #{id => bootstate, + start => {rabbit_boot_state_sup, start_link, []}, + type => supervisor}, + %% `rabbit_prelaunch` does not start a process, it only configures + %% the node. + Prelaunch = #{id => prelaunch, + start => {rabbit_prelaunch, run_prelaunch_first_phase, []}, + restart => transient}, + Procs = [BootStateSup, Prelaunch], + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, Procs}}. diff --git a/deps/rabbitmq_prometheus/Dockerfile b/deps/rabbitmq_prometheus/Dockerfile index 240a7065c099d82fb72a2ce30ccb428894a7b772..61a468357238ebefdedaa092beef56b47dad114f 100644 --- a/deps/rabbitmq_prometheus/Dockerfile +++ b/deps/rabbitmq_prometheus/Dockerfile @@ -19,8 +19,8 @@ ARG PGP_KEYSERVER=ha.pool.sks-keyservers.net # For context, see https://github.com/docker-library/official-images/issues/4252 # Using the latest OpenSSL LTS release, with support until September 2023 - https://www.openssl.org/source/ -ENV OPENSSL_VERSION 1.1.1d -ENV OPENSSL_SOURCE_SHA256="1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2" +ENV OPENSSL_VERSION 1.1.1g +ENV OPENSSL_SOURCE_SHA256="ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46" # https://www.openssl.org/community/omc.html ENV OPENSSL_PGP_KEY_IDS="0x8657ABB260F056B1E5190839D9C4D26D0E604491 0x5B2545DAB21995F4088CEFAA36CEE4DEB00CFE33 0xED230BEC4D4F2518B9D7DF41F0DB4D21C1D35231 0xC1F33DD8CE1D4CC613AF14DA9195C48241FBF7DD 0x7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C 0xE5E52560DD91C556DDBDA5D02064C53641C25E5D" @@ -290,7 +290,7 @@ RUN set -eux; \ ' -- /plugins/rabbitmq_management-*.ez > /usr/local/bin/rabbitmqadmin; \ [ -s /usr/local/bin/rabbitmqadmin ]; \ chmod +x /usr/local/bin/rabbitmqadmin; \ - apt-get update; apt-get install -y --no-install-recommends python; rm -rf /var/lib/apt/lists/*; \ + apt-get update; apt-get install -y --no-install-recommends python3; rm -rf /var/lib/apt/lists/*; \ rabbitmqadmin --version EXPOSE 15671 15672 diff --git a/deps/rabbitmq_prometheus/Makefile b/deps/rabbitmq_prometheus/Makefile index e37dfc0ffdd613c35f13f3052637f7c049eaa1ba..84c876b9697a97fce231c5443644d63454e336ce 100644 --- a/deps/rabbitmq_prometheus/Makefile +++ b/deps/rabbitmq_prometheus/Makefile @@ -1,15 +1,15 @@ TODAY := $(shell date -u +'%Y.%m.%d') # Use the latest alpha RabbitMQ 3.8 release - https://ci.rabbitmq.com/teams/main/pipelines/server-release:v3.8.x/jobs/build-test-package-generic-unix-latest-toolchain -BASED_ON_RABBITMQ_VERSION := 3.8.3-alpha.93 +BASED_ON_RABBITMQ_VERSION := 3.8.4-alpha.23 DOCKER_IMAGE_NAME := pivotalrabbitmq/rabbitmq-prometheus DOCKER_IMAGE_VERSION := $(BASED_ON_RABBITMQ_VERSION)-$(TODAY) # RABBITMQ_VERSION is used in rabbitmq-components.mk to set PROJECT_VERSION RABBITMQ_VERSION ?= $(DOCKER_IMAGE_VERSION) # This is taken from the CI job above -RABBITMQ_BUILD_NUMBER := 880 +RABBITMQ_BUILD_NUMBER := 941 # make find-latest-otp -OTP_VERSION := 22.2.6 -OTP_SHA256 := 4cf44ed12f657c309a2c00e7806f36f56a88e5b74de6814058796561f3842f66 +OTP_VERSION := 22.3.2 +OTP_SHA256 := 4a3719c71a7998e4f57e73920439b4b1606f7c045e437a0f0f9f1613594d3eaa define PROJECT_ENV [ @@ -120,7 +120,7 @@ dib: docker-image-build docker-image-bump: ## diu | Bump Docker image version across all docker-compose-* files @sed -i '' \ -e 's|$(DOCKER_IMAGE_NAME):.*|$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_VERSION)|g' \ - -e 's|pivotalrabbitmq/perf-test:.*|pivotalrabbitmq/perf-test:2.10.0-ubuntu|g' \ + -e 's|pivotalrabbitmq/perf-test:.*|pivotalrabbitmq/perf-test:2.11.0-ubuntu|g' \ docker/docker-compose-{overview,dist-tls,qq}.yml .PHONY: diu diu: docker-image-bump diff --git a/deps/rabbitmq_prometheus/README.md b/deps/rabbitmq_prometheus/README.md index a8ed8b189521469799cf926c59afd8d17887dd79..39e22098f6d08307c4f4ed9116240b825a31b38b 100644 --- a/deps/rabbitmq_prometheus/README.md +++ b/deps/rabbitmq_prometheus/README.md @@ -21,14 +21,22 @@ This plugin is included into RabbitMQ 3.8.x releases. Like all [plugins](https:/ To enable it with [rabbitmq-plugins](http://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html): - rabbitmq-plugins enable rabbitmq_prometheus +``` shell +rabbitmq-plugins enable rabbitmq_prometheus +``` ## Usage See the [documentation guide](https://www.rabbitmq.com/prometheus.html). -Default port used by the plugin is `15692`. In most environments there would be no configuration -necessary. +Default port used by the plugin is `15692` and the endpoint path is at `/metrics`. +To try it with `curl`: + +```shell +curl -v -H "Accept:text/plain" "http://localhost:15692/metrics" +``` + +In most environments there would be no configuration necessary. See the entire list of [metrics](metrics.md) exposed via the default port. diff --git a/deps/rabbitmq_prometheus/erlang.mk b/deps/rabbitmq_prometheus/erlang.mk index f9d7c8d342d5abee1e9550748ea48083ea7c2ada..4134991735a15d11e6d9304c52943b063179b532 100644 --- a/deps/rabbitmq_prometheus/erlang.mk +++ b/deps/rabbitmq_prometheus/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/proper plugins/protobuffs # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -7477,3 +7548,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_prometheus/rabbitmq-components.mk b/deps/rabbitmq_prometheus/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_prometheus/rabbitmq-components.mk +++ b/deps/rabbitmq_prometheus/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl index 13cdacc1d74de8b9f55977572b511a6f69cca823..cf20ac6ef400ca9d8af6a15f861769309c7be6b5 100644 --- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl +++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl @@ -25,6 +25,7 @@ -define(TCP_CONTEXT, rabbitmq_prometheus_tcp). -define(TLS_CONTEXT, rabbitmq_prometheus_tls). -define(DEFAULT_PORT, 15692). +-define(DEFAULT_TLS_PORT, 15691). start(_Type, _StartArgs) -> %% TCP listener uses prometheus.tcp.*. @@ -41,20 +42,33 @@ init(_) -> -spec start_configured_listener() -> ok. start_configured_listener() -> - Listeners = case {has_configured_tcp_listener(), - has_configured_tls_listener()} of - {false, false} -> - %% nothing is configured - [get_tcp_listener()]; - {false, true} -> - [get_tls_listener()]; - {true, false} -> - [get_tcp_listener()]; - {true, true} -> - [get_tcp_listener(), - get_tls_listener()] - end, - [ start_listener(Listener) || Listener <- Listeners ]. + Listeners0 = case {has_configured_tcp_listener(), + has_configured_tls_listener()} of + {false, false} -> + %% nothing is configured + [get_tcp_listener()]; + {false, true} -> + [get_tls_listener()]; + {true, false} -> + [get_tcp_listener()]; + {true, true} -> + [get_tcp_listener(), + get_tls_listener()] + end, + Listeners1 = maybe_disable_sendfile(Listeners0), + [start_listener(Listener) || Listener <- Listeners1]. + +maybe_disable_sendfile(Listeners) -> + DisableSendfile = #{sendfile => false}, + F = fun(L0) -> + CowboyOptsL0 = proplists:get_value(cowboy_opts, L0, []), + CowboyOptsM0 = maps:from_list(CowboyOptsL0), + CowboyOptsM1 = maps:merge(DisableSendfile, CowboyOptsM0), + CowboyOptsL1 = maps:to_list(CowboyOptsM1), + L1 = lists:keydelete(cowboy_opts, 1, L0), + [{cowboy_opts, CowboyOptsL1}|L1] + end, + lists:map(F, Listeners). has_configured_tcp_listener() -> has_configured_listener(tcp_config). @@ -70,34 +84,48 @@ has_configured_listener(Key) -> get_tls_listener() -> {ok, Listener0} = application:get_env(rabbitmq_prometheus, ssl_config), - [{ssl, true} | Listener0]. + case proplists:get_value(cowboy_opts, Listener0) of + undefined -> + [{ssl, true}, {ssl_opts, Listener0}]; + CowboyOpts -> + Listener1 = lists:keydelete(cowboy_opts, 1, Listener0), + [{ssl, true}, {ssl_opts, Listener1}, {cowboy_opts, CowboyOpts}] + end. get_tcp_listener() -> application:get_env(rabbitmq_prometheus, tcp_config, []). -start_listener(Listener) -> - {Type, ContextName, Protocol} = case is_tls(Listener) of +start_listener(Listener0) -> + {Type, ContextName, Protocol} = case is_tls(Listener0) of true -> {tls, ?TLS_CONTEXT, 'https/prometheus'}; false -> {tcp, ?TCP_CONTEXT, 'http/prometheus'} end, - {ok, _} = register_context(ContextName, Protocol, Listener), - log_startup(Type, Listener). + {ok, Listener1} = ensure_port_and_protocol(Type, Protocol, Listener0), + {ok, _} = register_context(ContextName, Listener1), + log_startup(Type, Listener1). -register_context(ContextName, Protocol, Listener0) -> - M0 = maps:from_list(Listener0), - %% include default port if it's not provided in the config - %% as Cowboy won't start if the port is missing - M1 = maps:merge(#{port => ?DEFAULT_PORT, - protocol => Protocol}, M0), +register_context(ContextName, Listener) -> + Dispatcher = rabbit_prometheus_dispatcher:build_dispatcher(), rabbit_web_dispatch:register_context_handler( - ContextName, maps:to_list(M1), "", - rabbit_prometheus_dispatcher:build_dispatcher(), - "RabbitMQ Prometheus"). + ContextName, Listener, "", + Dispatcher, "RabbitMQ Prometheus"). unregister_all_contexts() -> rabbit_web_dispatch:unregister_context(?TCP_CONTEXT), rabbit_web_dispatch:unregister_context(?TLS_CONTEXT). +ensure_port_and_protocol(tls, Protocol, Listener) -> + do_ensure_port_and_protocol(?DEFAULT_TLS_PORT, Protocol, Listener); +ensure_port_and_protocol(tcp, Protocol, Listener) -> + do_ensure_port_and_protocol(?DEFAULT_PORT, Protocol, Listener). + +do_ensure_port_and_protocol(Port, Protocol, Listener) -> + %% include default port if it's not provided in the config + %% as Cowboy won't start if the port is missing + M0 = maps:from_list(Listener), + M1 = maps:merge(#{port => Port, protocol => Protocol}, M0), + {ok, maps:to_list(M1)}. + log_startup(tcp, Listener) -> rabbit_log:info("Prometheus metrics: HTTP (non-TLS) listener started on port ~w", [port(Listener)]); log_startup(tls, Listener) -> diff --git a/deps/rabbitmq_random_exchange/erlang.mk b/deps/rabbitmq_random_exchange/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_random_exchange/erlang.mk +++ b/deps/rabbitmq_random_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_random_exchange/rabbitmq-components.mk b/deps/rabbitmq_random_exchange/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_random_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_random_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_recent_history_exchange/erlang.mk b/deps/rabbitmq_recent_history_exchange/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_recent_history_exchange/erlang.mk +++ b/deps/rabbitmq_recent_history_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk b/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_sharding/erlang.mk b/deps/rabbitmq_sharding/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_sharding/erlang.mk +++ b/deps/rabbitmq_sharding/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_sharding/rabbitmq-components.mk b/deps/rabbitmq_sharding/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_sharding/rabbitmq-components.mk +++ b/deps/rabbitmq_sharding/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_shovel/erlang.mk b/deps/rabbitmq_shovel/erlang.mk index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644 --- a/deps/rabbitmq_shovel/erlang.mk +++ b/deps/rabbitmq_shovel/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_shovel/rabbitmq-components.mk b/deps/rabbitmq_shovel/rabbitmq-components.mk index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644 --- a/deps/rabbitmq_shovel/rabbitmq-components.mk +++ b/deps/rabbitmq_shovel/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl index 1c6c71da55cc0c2769cd1be9e04cc536c9344cc2..4745f3a62ad6f263da150b17449b746cf97ad27b 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl @@ -66,14 +66,22 @@ validate([_], _Opts) -> merge_defaults(A, Opts) -> {A, maps:merge(#{vhost => <<"/">>}, Opts)}. -banner([Name], #{vhost := Vhost}) -> +banner([Name], #{vhost := VHost}) -> erlang:list_to_binary(io_lib:format("Deleting shovel ~s in vhost ~s", - [Name, Vhost])). - -run([Name], #{node := Node, vhost := Vhost}) -> - rabbit_misc:rpc_call(Node, rabbit_runtime_parameters, clear, - [Vhost, <<"shovel">>, Name, - 'Elixir.RabbitMQ.CLI.Core.Helpers':cli_acting_user()]). + [Name, VHost])). + +run([Name], #{node := Node, vhost := VHost}) -> + ActingUser = 'Elixir.RabbitMQ.CLI.Core.Helpers':cli_acting_user(), + case rabbit_misc:rpc_call(Node, rabbit_shovel_util, delete_shovel, [VHost, Name, ActingUser]) of + {badrpc, _} = Error -> + Error; + {error, not_found} -> + ErrMsg = rabbit_misc:format("Shovel with the given name was not found " + "on the target node '~s' and / or virtual host '~s'", + [Node, VHost]), + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> ok + end. switches() -> []. diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl index 820f6cbc7ecb94d67728c6f4971e2d71565d6bc0..fffc90b15af0bc85b3d031ec5e3bb35c73cf2438 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl @@ -53,25 +53,23 @@ validate([_], _Opts) -> validate(_, _Opts) -> {validation_failure, too_many_args}. -merge_defaults(A, O) -> - {A, O}. +merge_defaults(A, Opts) -> + {A, maps:merge(#{vhost => <<"/">>}, Opts)}. banner([Name], #{node := Node, vhost := VHost}) -> erlang:iolist_to_binary([<<"Restarting dynamic Shovel ">>, Name, <<" in virtual host ">>, VHost, << " on node ">>, atom_to_binary(Node, utf8)]). run([Name], #{node := Node, vhost := VHost}) -> - case rabbit_misc:rpc_call(Node, rabbit_shovel_status, lookup, [{VHost, Name}]) of + case rabbit_misc:rpc_call(Node, rabbit_shovel_util, restart_shovel, [VHost, Name]) of {badrpc, _} = Error -> Error; - not_found -> - {error, <<"Shovel with the given name was not found in the target virtual host">>}; - _Obj -> - ok = rabbit_misc:rpc_call(Node, rabbit_shovel_dyn_worker_sup_sup, stop_child, - [{VHost, Name}]), - {ok, _} = rabbit_misc:rpc_call(Node, rabbit_shovel_dyn_worker_sup_sup, start_link, - []), - ok + {error, not_found} -> + ErrMsg = rabbit_misc:format("Shovel with the given name was not found " + "on the target node '~s' and / or virtual host '~s'", + [Node, VHost]), + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> ok end. output(Output, _Opts) -> diff --git a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl index c4ffc01dc7e866a91b6a2d1446a9dcca33aac079..e7f6a3b3778e84a081876c454c80a6ba6a997782 100644 --- a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl +++ b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl @@ -43,6 +43,7 @@ ]). -import(rabbit_misc, [pget/2, pget/3]). +-import(rabbit_data_coercion, [to_binary/1]). -define(INFO(Text, Args), error_logger:info_msg(Text, Args)). -define(LINK_CREDIT_TIMEOUT, 5000). @@ -353,17 +354,52 @@ add_forward_headers(#{dest := #{cached_forward_headers := Props}}, Msg) -> add_forward_headers(_, Msg) -> Msg. set_message_properties(Props, Msg) -> - maps:fold(fun(delivery_mode, 2, M) -> - amqp10_msg:set_headers(#{durable => true}, M); - (content_type, Ct, M) -> - amqp10_msg:set_properties( - #{content_type => rabbit_data_coercion:to_binary(Ct)}, M); - (_, _, M) -> M - end, Msg, Props). + %% this is effectively special handling properties from amqp 0.9.1 + maps:fold( + fun(content_type, Ct, M) -> + amqp10_msg:set_properties( + #{content_type => to_binary(Ct)}, M); + (content_encoding, Ct, M) -> + amqp10_msg:set_properties( + #{content_encoding => to_binary(Ct)}, M); + (delivery_mode, 2, M) -> + amqp10_msg:set_headers(#{durable => true}, M); + (correlation_id, Ct, M) -> + amqp10_msg:set_properties(#{correlation_id => to_binary(Ct)}, M); + (reply_to, Ct, M) -> + amqp10_msg:set_properties(#{reply_to => to_binary(Ct)}, M); + (message_id, Ct, M) -> + amqp10_msg:set_properties(#{message_id => to_binary(Ct)}, M); + (timestamp, Ct, M) -> + amqp10_msg:set_properties(#{creation_time => Ct}, M); + (user_id, Ct, M) -> + amqp10_msg:set_properties(#{user_id => Ct}, M); + (headers, Headers0, M) when is_list(Headers0) -> + %% AMPQ 0.9.1 are added as applicatin properties + %% TODO: filter headers to make safe + Headers = lists:foldl( + fun ({K, _T, V}, Acc) -> + case is_amqp10_compat(V) of + true -> + Acc#{to_binary(K) => V}; + false -> + Acc + end + end, #{}, Headers0), + amqp10_msg:set_application_properties(Headers, M); + (Key, Value, M) -> + case is_amqp10_compat(Value) of + true -> + amqp10_msg:set_application_properties( + #{to_binary(Key) => Value}, M); + false -> + M + end + end, Msg, Props). gen_unique_name(Pre0, Post0) -> - Pre = rabbit_data_coercion:to_binary(Pre0), - Post = rabbit_data_coercion:to_binary(Post0), + Pre = to_binary(Pre0), + Post = to_binary(Post0), Id = bin_to_hex(crypto:strong_rand_bytes(8)), <
    >/binary, Id/binary, <<"_">>/binary, Post/binary>>.
     
    @@ -371,3 +407,10 @@ bin_to_hex(Bin) ->
         <<<= 10 -> N -10 + $a;
                true  -> N + $0 end>>
           || <> <= Bin>>.
    +
    +is_amqp10_compat(T) ->
    +    is_binary(T) orelse
    +    is_number(T) orelse
    +    %% TODO: not all lists are compatible
    +    is_list(T) orelse
    +    is_boolean(T).
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    index c303a2531d0cba606c0b8bade883dcda3cb94f31..ca92902d297434376eb19c69ff803714ad84c54b 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    @@ -39,7 +39,7 @@ init([Name, Config0]) ->
         end,
         Restart = case Delay of
             N when is_integer(N) andalso N > 0 ->
    -          case pget(<<"src-delete-after">>, Config, <<"never">>) of
    +          case pget(<<"src-delete-after">>, Config, pget(<<"delete-after">>, Config, <<"never">>)) of
                 %% always try to reconnect
                 <<"never">>                        -> {permanent, N};
                 %% this Shovel is an autodelete one
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    index f5f47495832066fc6484e35d28d1f75efca448ec..3bafebe70aa30b01f6c3844e52e1ff4a6c124c41 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    @@ -84,7 +84,7 @@ validate_amqp091_src(Def) ->
              one  -> ok;
              both -> {error, "Cannot specify 'src-exchange' and 'src-queue'", []}
          end,
    -     case {pget(<<"delete-after">>, Def), pget(<<"ack-mode">>, Def)} of
    +     case {pget(<<"src-delete-after">>, Def, pget(<<"delete-after">>, Def)), pget(<<"ack-mode">>, Def)} of
              {N, <<"no-ack">>} when is_integer(N) ->
                  {error, "Cannot specify 'no-ack' and numerical 'delete-after'", []};
              _ ->
    @@ -131,7 +131,9 @@ amqp091_src_validation(_Def, User) ->
          {<<"src-queue">>,       fun rabbit_parameter_validation:binary/2,optional},
          {<<"prefetch-count">>,  fun rabbit_parameter_validation:number/2,optional},
          {<<"src-prefetch-count">>,  fun rabbit_parameter_validation:number/2,optional},
    +     %% a deprecated pre-3.7 setting
          {<<"delete-after">>, fun validate_delete_after/2, optional},
    +     %% currently used multi-protocol friend name, introduced in 3.7
          {<<"src-delete-after">>, fun validate_delete_after/2, optional}
         ].
     
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    index 3d1d647904ccfa34dab12fa3f4c5e24a4816cf7c..2a9521e783234757f325fe027a6d927bceb0d7de 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    @@ -17,7 +17,9 @@
     -module(rabbit_shovel_util).
     
     -export([update_headers/5,
    -         add_timestamp_header/1]).
    +         add_timestamp_header/1,
    +         delete_shovel/3,
    +         restart_shovel/2]).
     
     -include_lib("rabbit_common/include/rabbit_framing.hrl").
     
    @@ -41,3 +43,21 @@ add_timestamp_header(Props = #'P_basic'{headers = Headers}) ->
                                                long,
                                                os:system_time(seconds)),
         Props#'P_basic'{headers = Headers2}.
    +
    +delete_shovel(VHost, Name, ActingUser) ->
    +    case rabbit_shovel_status:lookup({VHost, Name}) of
    +        not_found ->
    +            {error, not_found};
    +        _Obj ->
    +            ok = rabbit_runtime_parameters:clear(VHost, <<"shovel">>, Name, ActingUser)
    +    end.
    +
    +restart_shovel(VHost, Name) ->
    +    case rabbit_shovel_status:lookup({VHost, Name}) of
    +        not_found ->
    +            {error, not_found};
    +        _Obj ->
    +            ok = rabbit_shovel_dyn_worker_sup_sup:stop_child({VHost, Name}),
    +            {ok, _} = rabbit_shovel_dyn_worker_sup_sup:start_link(),
    +            ok
    +    end.
    diff --git a/deps/rabbitmq_shovel_management/README.md b/deps/rabbitmq_shovel_management/README.md
    index a40272683f67847e301ac543fe5dd58562ba15a9..8e2bcfc8a433712e745bd1ed1b056d019d352431 100644
    --- a/deps/rabbitmq_shovel_management/README.md
    +++ b/deps/rabbitmq_shovel_management/README.md
    @@ -93,4 +93,4 @@ curl -u guest:guest -v -X DELETE http://localhost:15672/api/parameters/shovel/%2
     
     Released under [the same license as RabbitMQ](https://www.rabbitmq.com/mpl.html).
     
    -2007-2018 (c) Pivotal Software Inc.
    +2007-2018 (c) 2007-2020 VMware, Inc. or its affiliates.
    diff --git a/deps/rabbitmq_shovel_management/erlang.mk b/deps/rabbitmq_shovel_management/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_shovel_management/erlang.mk
    +++ b/deps/rabbitmq_shovel_management/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_shovel_management/priv/www/js/shovel.js b/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    index d93a6206948eb68c92c140989943c0d8962ea7a2..a4f85cb98876c48ef8a95f4a37429df3c23c6b8d 100644
    --- a/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    +++ b/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    @@ -80,15 +80,21 @@ dispatcher_add(function(sammy) {
                 return false;
             });
         sammy.del('#/shovel-parameters', function() {
    -            if (sync_delete(this, '/parameters/:component/:vhost/:name'))
    +            if (sync_delete(this, '/shovels/vhost/:vhost/:name')) {
                     go_to('#/dynamic-shovels');
    -            return false;
    +            } else {
    +                show_popup('warn', 'Shovel not deleted because it is not running on this node.');
    +                return false;
    +            }
             });
         sammy.del("#/shovel-restart-link", function(){
    -        if(sync_delete(this, '/shovels/vhost/:vhost/:name/restart')){
    -            update();
    -        }
    -    });
    +            if (sync_delete(this, '/shovels/vhost/:vhost/:name/restart')) {
    +                update();
    +            } else {
    +                show_popup('warn', 'Shovel not restarted because it is not running on this node.');
    +                return false;
    +            }
    +        });
     });
     
     
    diff --git a/deps/rabbitmq_shovel_management/rabbitmq-components.mk b/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    +++ b/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    index 69540b0dbd9df95a0c7f7df49bef8500690c4078..fe9ba00e540aefb774a3a7891891932194158730 100644
    --- a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    +++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    @@ -11,7 +11,7 @@
     %%  The Original Code is RabbitMQ.
     %%
     %%  The Initial Developer of the Original Code is GoPivotal, Inc.
    -%%  Copyright (c) 2007-2020 Pivotal Software, Inc.  All rights reserved.
    +%%  Copyright (c) 2007-2020 VMware, Inc. or its affiliates.  All rights reserved.
     %%
     
     -module(rabbit_shovel_mgmt).
    @@ -29,6 +29,7 @@
     
     dispatcher() -> [{"/shovels",        ?MODULE, []},
                      {"/shovels/:vhost", ?MODULE, []},
    +                 {"/shovels/vhost/:vhost/:name", ?MODULE, []},
                      {"/shovels/vhost/:vhost/:name/restart", ?MODULE, []}].
     
     web_ui()     -> [{javascript, <<"shovel.js">>}].
    @@ -45,17 +46,26 @@ allowed_methods(ReqData, Context) ->
         {[<<"HEAD">>, <<"GET">>, <<"DELETE">>, <<"OPTIONS">>], ReqData, Context}.
     
     resource_exists(ReqData, Context) ->
    -    {case rabbit_mgmt_util:vhost(ReqData) of
    -         not_found -> false;
    -         VHost     -> case rabbit_mgmt_util:id(name, ReqData) of
    -                          none -> true;
    -                          %% Restarting a shovel
    -                          Name -> case rabbit_shovel_status:lookup({VHost, Name}) of
    -                                      not_found -> false;
    -                                      _ -> true
    -                                  end
    -                      end
    -     end, ReqData, Context}.
    +    Reply = case rabbit_mgmt_util:vhost(ReqData) of
    +                not_found ->
    +                    false;
    +                VHost ->
    +                    case rabbit_mgmt_util:id(name, ReqData) of
    +                        none -> true;
    +                        Name ->
    +                            %% Deleting or restarting a shovel
    +                            case rabbit_shovel_status:lookup({VHost, Name}) of
    +                                not_found ->
    +                                    rabbit_log:error("Shovel with the name '~s' was not found "
    +                                                     "on the target node '~s' and / or virtual host '~s'",
    +                                                     [Name, node(), VHost]),
    +                                    false;
    +                                _ ->
    +                                    true
    +                            end
    +                    end
    +            end,
    +    {Reply, ReqData, Context}.
     
     to_json(ReqData, Context) ->
         rabbit_mgmt_util:reply_list(
    @@ -64,21 +74,41 @@ to_json(ReqData, Context) ->
     is_authorized(ReqData, Context) ->
         rabbit_mgmt_util:is_authorized_monitor(ReqData, Context).
     
    -delete_resource(ReqData, Context) ->
    +delete_resource(ReqData, #context{user = #user{username = Username}}=Context) ->
         VHost = rabbit_mgmt_util:id(vhost, ReqData),
    -    Reply =
    -        case rabbit_mgmt_util:id(name, ReqData) of
    -            none ->
    -                false;
    -            Name ->
    -                ok = rabbit_shovel_dyn_worker_sup_sup:stop_child({VHost, Name}),
    -                {ok, _} = rabbit_shovel_dyn_worker_sup_sup:start_link(),
    -                true
    -        end,
    +    Reply = case rabbit_mgmt_util:id(name, ReqData) of
    +                none ->
    +                    false;
    +                Name ->
    +                    %% We must distinguish between a delete and restart
    +                    case is_restart(ReqData) of
    +                        true ->
    +                            case rabbit_shovel_util:restart_shovel(VHost, Name) of
    +                                {error, ErrMsg} ->
    +                                    rabbit_log:error("Error restarting shovel: ~s", [ErrMsg]),
    +                                    false;
    +                                ok -> true
    +                            end;
    +                        _ ->
    +                            case rabbit_shovel_util:delete_shovel(VHost, Name, Username) of
    +                                {error, ErrMsg} ->
    +                                    rabbit_log:error("Error deleting shovel: ~s", [ErrMsg]),
    +                                    false;
    +                                ok -> true
    +                            end
    +                    end
    +            end,
         {Reply, ReqData, Context}.
     
     %%--------------------------------------------------------------------
     
    +is_restart(ReqData) ->
    +    Path = cowboy_req:path(ReqData),
    +    case string:find(Path, "/restart", trailing) of
    +        nomatch -> false;
    +        _ -> true
    +    end.
    +
     filter_vhost_req(List, ReqData) ->
         case rabbit_mgmt_util:vhost(ReqData) of
             none      -> List;
    diff --git a/deps/rabbitmq_stomp/Makefile b/deps/rabbitmq_stomp/Makefile
    index 3c03242c9fda00cca87f29207cf7c9c4e3cccfa6..a8a3e57c90cc5966e73b5fcb6498aad0684c3fb8 100644
    --- a/deps/rabbitmq_stomp/Makefile
    +++ b/deps/rabbitmq_stomp/Makefile
    @@ -9,6 +9,7 @@ define PROJECT_ENV
     	      {passcode, <<"guest">>}]},
     	    {default_vhost, <<"/">>},
     	    {default_topic_exchange, <<"amq.topic">>},
    +		{default_nack_requeue, true},
     	    {ssl_cert_login, false},
     	    {implicit_connect, false},
     	    {tcp_listeners, [61613]},
    diff --git a/deps/rabbitmq_stomp/erlang.mk b/deps/rabbitmq_stomp/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_stomp/erlang.mk
    +++ b/deps/rabbitmq_stomp/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema b/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    index d5ad4da2121ab9819b04eaab8667b9b83c84a9d2..37ca7fe15957e0f8c194648ef361dc79ea5d770d 100644
    --- a/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    +++ b/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    @@ -150,11 +150,11 @@ end}.
         {datatype, integer}
     ]}.
     
    -%% Additional SSL options
    +%% Additional TLS options
     
    -%% Extract a name from the client's certificate when using SSL.
    +%% Extract a name from the client's certificate when using TLS.
     %%
    -%% {ssl_cert_login, true},
    +%% Defaults to true.
     
     {mapping, "stomp.ssl_cert_login", "rabbitmq_stomp.ssl_cert_login",
         [{datatype, {enum, [true, false]}}]}.
    @@ -194,28 +194,37 @@ fun(Conf) ->
         list_to_binary(cuttlefish:conf_get("stomp.default_topic_exchange", Conf, "amq.topic"))
     end}.
     
    -%% If a default user is configured, or you have configured use SSL client
    -%% certificate based authentication, you can choose to allow clients to
    +%% If a default user is configured, or if x.509
    +%% certificate-based client authentication is used, use this setting to allow clients to
     %% omit the CONNECT frame entirely. If set to true, the client is
     %% automatically connected as the default user or user supplied in the
    -%% SSL certificate whenever the first frame sent on a session is not a
    +%% x.509/TLS certificate whenever the first frame sent on a session is not a
     %% CONNECT frame.
     %%
    -%% {implicit_connect, true}
    +%% Defaults to true.
     
     {mapping, "stomp.implicit_connect", "rabbitmq_stomp.implicit_connect",
         [{datatype, {enum, [true, false]}}]}.
     
     %% Whether or not to enable proxy protocol support.
     %%
    -%% {proxy_protocol, false}
    +%% Defaults to false.
     
     {mapping, "stomp.proxy_protocol", "rabbitmq_stomp.proxy_protocol",
         [{datatype, {enum, [true, false]}}]}.
     
     %% Whether or not to hide server info
     %%
    -%% {hide_server_info, false}
    +%% Defaults to false.
     
     {mapping, "stomp.hide_server_info", "rabbitmq_stomp.hide_server_info",
         [{datatype, {enum, [true, false]}}]}.
    +
    +%% Whether or not to always requeue the message on nack
    +%% If not set then coordinated by the usage of the frame "requeue" header
    +%% Useful when you are not fully controlling the STOMP consumer implementation
    +%%
    +%% Defaults to true.
    +
    +{mapping, "stomp.default_nack_requeue", "rabbitmq_stomp.default_nack_requeue",
    +    [{datatype, {enum, [true, false]}}]}.
    diff --git a/deps/rabbitmq_stomp/rabbitmq-components.mk b/deps/rabbitmq_stomp/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_stomp/rabbitmq-components.mk
    +++ b/deps/rabbitmq_stomp/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    index 4517b521fe7337caa6c867e8911794478402572f..732efff1c07ab16b1ae866c693c36d1aadd687e9 100644
    --- a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    +++ b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    @@ -37,7 +37,7 @@
                     adapter_info, send_fun, ssl_login_name, peer_addr,
                     %% see rabbitmq/rabbitmq-stomp#39
                     trailing_lf, auth_mechanism, auth_login,
    -                default_topic_exchange}).
    +                default_topic_exchange, default_nack_requeue}).
     
     -record(subscription, {dest_hdr, ack_mode, multi_ack, description}).
     
    @@ -163,7 +163,8 @@ initial_state(Configuration,
            reply_queues        = #{},
            frame_transformer   = undefined,
            trailing_lf         = application:get_env(rabbitmq_stomp, trailing_lf, true),
    -       default_topic_exchange = application:get_env(rabbitmq_stomp, default_topic_exchange, <<"amq.topic">>)}.
    +       default_topic_exchange = application:get_env(rabbitmq_stomp, default_topic_exchange, <<"amq.topic">>),
    +       default_nack_requeue = application:get_env(rabbitmq_stomp, default_nack_requeue, true)}.
     
     
     command({"STOMP", Frame}, State) ->
    @@ -399,8 +400,9 @@ handle_frame(Command, _Frame, State) ->
     
     ack_action(Command, Frame,
                State = #proc_state{subscriptions = Subs,
    -                          channel       = Channel,
    -                          version       = Version}, MethodFun) ->
    +                          channel              = Channel,
    +                          version              = Version,
    +                          default_nack_requeue = DefaultNackRequeue}, MethodFun) ->
         AckHeader = rabbit_stomp_util:ack_header_name(Version),
         case rabbit_stomp_frame:header(Frame, AckHeader) of
             {ok, AckValue} ->
    @@ -408,7 +410,7 @@ ack_action(Command, Frame,
                     {ok, {ConsumerTag, _SessionId, DeliveryTag}} ->
                         case maps:find(ConsumerTag, Subs) of
                             {ok, Sub} ->
    -                            Requeue = rabbit_stomp_frame:boolean_header(Frame, "requeue", true),
    +                            Requeue = rabbit_stomp_frame:boolean_header(Frame, "requeue", DefaultNackRequeue),
                                 Method = MethodFun(DeliveryTag, Sub, Requeue),
                                 case transactional(Frame) of
                                     {yes, Transaction} ->
    diff --git a/deps/rabbitmq_top/erlang.mk b/deps/rabbitmq_top/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_top/erlang.mk
    +++ b/deps/rabbitmq_top/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_top/rabbitmq-components.mk b/deps/rabbitmq_top/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_top/rabbitmq-components.mk
    +++ b/deps/rabbitmq_top/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_tracing/erlang.mk b/deps/rabbitmq_tracing/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_tracing/erlang.mk
    +++ b/deps/rabbitmq_tracing/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_tracing/rabbitmq-components.mk b/deps/rabbitmq_tracing/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_tracing/rabbitmq-components.mk
    +++ b/deps/rabbitmq_tracing/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_trust_store/erlang.mk b/deps/rabbitmq_trust_store/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_trust_store/erlang.mk
    +++ b/deps/rabbitmq_trust_store/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_trust_store/rabbitmq-components.mk b/deps/rabbitmq_trust_store/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_trust_store/rabbitmq-components.mk
    +++ b/deps/rabbitmq_trust_store/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    index d328a9a5f46588bfbb7387b93dffd00a503c8e8b..e39e07a588f38c8e571b2e7234e57a3d21c7f534 100644
    --- a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    +++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    @@ -167,7 +167,7 @@ handle_info(refresh, #state{refresh_interval = Interval,
                                 providers_state = ProvidersState} = St) ->
             Config = application:get_all_env(rabbitmq_trust_store),
             try
    -            rabbit_log:error("Trust store will attempt to refresh certificates..."),
    +            rabbit_log:debug("Trust store will attempt to refresh certificates..."),
                 NewProvidersState = refresh_certs(Config, ProvidersState),
                 {noreply, St#state{providers_state = NewProvidersState}}
             catch
    diff --git a/deps/rabbitmq_web_dispatch/erlang.mk b/deps/rabbitmq_web_dispatch/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_web_dispatch/erlang.mk
    +++ b/deps/rabbitmq_web_dispatch/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_dispatch/rabbitmq-components.mk b/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_mqtt/erlang.mk b/deps/rabbitmq_web_mqtt/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_web_mqtt/erlang.mk
    +++ b/deps/rabbitmq_web_mqtt/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_mqtt/rabbitmq-components.mk b/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_mqtt_examples/erlang.mk b/deps/rabbitmq_web_mqtt_examples/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_web_mqtt_examples/erlang.mk
    +++ b/deps/rabbitmq_web_mqtt_examples/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk b/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_stomp/erlang.mk b/deps/rabbitmq_web_stomp/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_web_stomp/erlang.mk
    +++ b/deps/rabbitmq_web_stomp/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_stomp/rabbitmq-components.mk b/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_stomp_examples/erlang.mk b/deps/rabbitmq_web_stomp_examples/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/deps/rabbitmq_web_stomp_examples/erlang.mk
    +++ b/deps/rabbitmq_web_stomp_examples/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk b/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/erlang.mk b/erlang.mk
    index 11951061e3319fc26d4d73a486c0ae12573ead8e..83988d3025c26ec707f00c0ab3058cb08a6139ca 100644
    --- a/erlang.mk
    +++ b/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/git-revisions.txt b/git-revisions.txt
    index 471df5d077dfd6da1fc6d9d6c6a02682e23467bd..9d7bad746e640deb587c37d5c1cc984c0f2d0a46 100644
    --- a/git-revisions.txt
    +++ b/git-revisions.txt
    @@ -1,62 +1,67 @@
    -RabbitMQ Server 3.8.3
    -rabbitmq_server_release 672d1b2d1fda5d3f6ff88b09cd8a87d02101d3a3 v3.8.3-rc.2
    +RabbitMQ Server 3.8.4
    +rabbitmq_server_release ffe0887755c13c17a0d7e4bfd34ce708534941eb v3.8.4-rc.3
     accept  
    -amqp10_client 45508dc389872806caae6bba0286fcd33d8d14cc v3.8.3-rc.2
    -amqp10_common 41c459759b9f019f95c4103e05e81b55a7da987b 
    -amqp_client 81e4647702d2727d7131183bb3d45c1077da59be 
    +amqp10_client 35d5ffc57f666bf557fa10869af48537b24757aa 
    +amqp10_common 66527345e2bc7c76465153634575ffb7aebabf35 
    +amqp_client 05b491b641d8a56dbb3270bb448741a937842f68 
     aten  
     base64url  
     cowboy  
     cowlib  
     credentials_obfuscation  
    +cuttlefish  
    +eetcd  
     elvis_mk ac5ad774c0e317c8bfd0f5cca4153dd291a40ed1 master
     gen_batch_server  
    +getopt  
     goldrush 8f1b715d36b650ec1e1f5612c00e28af6ab0de82 0.1.9
    +gun  
     jose  
     jsx  
     lager  
     observer_cli  
     prometheus  
     ra  
    -rabbit 486f3adb6bab6ec19c312828c2746ffd69c07a4f 
    -rabbit_common 10a9337bbd44eb125b435e562376613cdf4d6435 
    -rabbitmq_amqp1_0 b370e97b2a6304fbef3c2ad21b69ac7a409fe42f v3.8.3-rc.2
    -rabbitmq_auth_backend_cache ff08e6230da8918b8f781d22a9065c9e1b2a6af8 v3.8.3-rc.2
    -rabbitmq_auth_backend_http f58cc12e0e8a645b0e5a337ca62e5a258a45cc27 v3.8.3-rc.2
    -rabbitmq_auth_backend_ldap 7e93f316fe2b90d2d340697678b58a92e03e7dc7 v3.8.3-rc.2
    -rabbitmq_auth_backend_oauth2 b6f1f4f38fff34f2aa47748478c4315755b98de5 
    -rabbitmq_auth_mechanism_ssl 16d047b1de91b277c94b2df4a8aa3cffd432fb7c v3.8.3-rc.2
    -rabbitmq_aws 1ef342dec965c62b900422ae54ef8a544f292a20 v3.8.3-rc.2
    -rabbitmq_cli fd1878ea4d572070d2b9021c60e6802a65394d81 
    -rabbitmq_codegen 427baf07bc91c8f3e378a563d148f8d4729a7ca9 v3.8.3-rc.1
    -rabbitmq_consistent_hash_exchange 4a044f0889fc8292b926e794a0285fea1cef3b2b v3.8.3-rc.2
    -rabbitmq_event_exchange f6ddec1a95cbf6c0410b648fce00cdc4e9c6cf30 v3.8.3-rc.2
    -rabbitmq_federation b7df935614d212d7b2bc3de7e37ab14ef6b7c918 v3.8.3-rc.2
    -rabbitmq_federation_management 16ca837cfadc92a1056644e2b10acd2d7e303230 v3.8.3-rc.2
    -rabbitmq_jms_topic_exchange ed6859e63c95124e608fc95f1eaa118c7c729bd5 v3.8.3-rc.2
    -rabbitmq_management f6501cdc69e8ca1f95e770e41882f2fa674d9a03 
    -rabbitmq_management_agent 6eaf8ff7885b4b5f03e68c27d1c18ea12e754b2e 
    -rabbitmq_mqtt 1b2256b9c9e497481626482d2f682ad529aa8f86 v3.8.3-rc.2
    -rabbitmq_peer_discovery_aws e815b9a3557782886c2d19eec3897ac3d316f049 v3.8.3-rc.2
    -rabbitmq_peer_discovery_common 6406e80196817c551d659121bd84d40bdcb05c22 v3.8.3-rc.2
    -rabbitmq_peer_discovery_consul 412c092316317243ba627179aada7dfc19f052f4 v3.8.3-rc.2
    -rabbitmq_peer_discovery_etcd b4a9b21704fc0a7e68bddf212dcbdd37b8c03a48 v3.8.3-rc.2
    -rabbitmq_peer_discovery_k8s 1566e49a60d313c2bbfb22883885efa5a93c82af v3.8.3-rc.2
    -rabbitmq_prometheus 74bb4d1c54c84e5ff5f0d339c32472f8586819bd 
    -rabbitmq_random_exchange afe1ad280a41a7ca25b7978ae2dbb018f2de43d3 v3.8.3-rc.2
    -rabbitmq_recent_history_exchange 80788e6d2fb8bf6379a3cba10f891f6036fb55ce 
    -rabbitmq_sharding b0d79a6e5f01e051b8418accfedf225318adc9fb v3.8.3-rc.2
    -rabbitmq_shovel bb87c309f5c9638581da43ae7c40ac9ef8e0e48d v3.8.3-rc.2
    -rabbitmq_shovel_management 89e2311efade5e0186516c705cbd43e82f512a3c v3.8.3-rc.2
    -rabbitmq_stomp 7ae304ab049d2b74961d3ccb575a5a2cf27b3e86 v3.8.3-rc.2
    -rabbitmq_top a5f1c128426becf925fe6ab0091ec49a1aa846e5 v3.8.3-rc.2
    -rabbitmq_tracing 3cb1ff44b447dcc8460b39d0ad3936715bb7dac2 v3.8.3-rc.2
    -rabbitmq_trust_store 9171451264cbd325db5208453eb1988d41292efa v3.8.3-rc.2
    -rabbitmq_web_dispatch c555117dcf50752a45626605d5dc8c6cb2fc1346 
    -rabbitmq_web_mqtt 0537f4fa7e97a424d0eec24abd49a2a2c7d4ee6a v3.8.3-rc.2
    -rabbitmq_web_mqtt_examples edee6393d7968ddb3553a7a8b9a56e5e9139ddec v3.8.3-rc.2
    -rabbitmq_web_stomp 76ec0a1b7585738aaf6396b7df1b4a29e10fa5f8 v3.8.3-rc.2
    -rabbitmq_web_stomp_examples 30f215ebf9982a14f3216079db3682a182f53ff2 v3.8.3-rc.2
    +rabbit 79825c9bea9ed6ebbe5d6dc330cced1fc30c1615 
    +rabbitmq_prelaunch 79825c9bea9ed6ebbe5d6dc330cced1fc30c1615 
    +rabbit_common be934c3af8f210d370083ad384ea2ce0c78f080e 
    +rabbitmq_amqp1_0 6e72c9bb1a09d6ee53389d64bda18e1b7da454bf 
    +rabbitmq_auth_backend_cache a1cb022f8c2d59fea27e1277237bdf24e6b4962a 
    +rabbitmq_auth_backend_http e1aa25fdc4ac651f0161cc872c973f74f3ff9493 
    +rabbitmq_auth_backend_ldap 9ae97b8542fc7b42d0eb139215ea07f162501700 
    +rabbitmq_auth_backend_oauth2 5c679aa0a2ca1de23705dcf4afe6a3c56859b0a8 
    +rabbitmq_auth_mechanism_ssl c3ab7fc801e922a8f445a63c930f92660cfdc33d 
    +rabbitmq_aws 5eae0ff4454e2f1a70b80f1fe9a101707af3d3e7 
    +rabbitmq_cli 5233ee4a476a8f1c807a59d364799d4049f19700 
    +rabbitmq_codegen 427baf07bc91c8f3e378a563d148f8d4729a7ca9 v3.8.3
    +rabbitmq_consistent_hash_exchange 55a1a3e13c6455b0004b3c5c54972d7d75d4d9fb 
    +rabbitmq_event_exchange 6bae2e21622fb0f9c726e42d1b167171f969aecf 
    +rabbitmq_federation c8992de866e5826fa384f81a201a01a8b5d18b6c 
    +rabbitmq_federation_management 5d30390becdd74a64cf906c588805adba8b26c5f 
    +rabbitmq_jms_topic_exchange 109a47c266a9561392f761e2e60a0acea2520a4a 
    +rabbitmq_management f434c791cad6fd74cc88ffd2452781ce84c86c64 
    +rabbitmq_management_agent b3fa808c6ddc8ca0f86fdb3c50a8a19acaa8006e 
    +rabbitmq_mqtt 86dcca55c7e09abdd8ce50b1cd902c92c9f28559 
    +rabbitmq_peer_discovery_aws 8e0064fddc7602aabe06aa9d9055c7caffbed63b 
    +rabbitmq_peer_discovery_common 8f63f2d9c990ce571df87267582880f0ddd2dc18 
    +rabbitmq_peer_discovery_consul ce492f2df99c00a72f67870389eab8e1f22d4f0a 
    +rabbitmq_peer_discovery_etcd c332d653d424b7dd8cb3a82e1a2d0b89433a52a6 
    +rabbitmq_peer_discovery_k8s 1bfac8e8eb22fc63a80e6a0fc710f6e7e8e41ea0 
    +rabbitmq_prometheus 17853e35ad114ee3791cdcd1646845a5da370d86 
    +rabbitmq_random_exchange bba72f15f5cfa57ff399b53997c4d36755404506 
    +rabbitmq_recent_history_exchange 36472f6ac3327fa6edd20331bf08d22878cdf5e7 
    +rabbitmq_sharding d7f21c4c74e254048828acfcd9c1f015b6d17b78 
    +rabbitmq_shovel 8c276cc1776181637788938197db7ae513870d75 
    +rabbitmq_shovel_management bca11e0a0a2587c366455eafa8d1fd3751f43ae3 
    +rabbitmq_stomp f1e552d5e4b0ff43c551835b26a99d5f7bcf89f4 
    +rabbitmq_top bd0f4ef83e4af8f9f7891ba9b192d94932f9da00 
    +rabbitmq_tracing 0cd6dfc084e4168d45a561cea616d8293b35e4e7 
    +rabbitmq_trust_store 675ad241dc6f68b0344f8e60a2f53b40db5bd7b1 
    +rabbitmq_web_dispatch cdbf60605f972f49ad8f49761bb85fe93902e517 
    +rabbitmq_web_mqtt a27c33449eb3d6a8ea3651138db810135fda671d 
    +rabbitmq_web_mqtt_examples 06d1733036a9bf794e812a1e27dc1ce00ec3075f 
    +rabbitmq_web_stomp 134913353b43585dafa786381a026a5704ad3225 
    +rabbitmq_web_stomp_examples 45cd06eebf416fde1070a3dc1463c2229a2b5a33 
     ranch  
     recon  
     stdout_formatter  
    diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk
    index c8a17e804fdbc69c723cc01bfbe6ca80a56064a1..79ebcd2dc6391b4b1d3056300b53beb72416f61c 100644
    --- a/rabbitmq-components.mk
    +++ b/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/scripts/rabbitmq-script-wrapper b/scripts/rabbitmq-script-wrapper
    index 0b5ab37e4c04d6d4a87bb7692244ed50f49f3740..6a379ce85900c2b9f690418234f2074c02993449 100644
    --- a/scripts/rabbitmq-script-wrapper
    +++ b/scripts/rabbitmq-script-wrapper
    @@ -16,8 +16,7 @@
     ##
     
     SCRIPT="$(basename "$0")"
    -RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env
    -RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")"
    +RABBITMQ_LOG_BASE=/var/log/rabbitmq
     
     main() {
       ensure_we_are_in_a_readable_dir
    @@ -72,13 +71,6 @@ calling_rabbitmq_plugins() {
     }
     
     exec_rabbitmq_server() {
    -  RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env
    -  # RABBITMQ_SCRIPTS_DIR is used in rabbitmq-env
    -  # shellcheck disable=SC2034
    -  RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")"
    -  # shellcheck source=/dev/null
    -  . "$RABBITMQ_ENV"
    -
       exec /usr/lib/rabbitmq/bin/rabbitmq-server "$@" @STDOUT_STDERR_REDIRECTION@
     }
     
    diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf
    index a881782114514a7da3a4d8727e96b85d5bc96eed..fd9a3c4b295a99af571ac679367388720d6f361d 100755
    --- a/scripts/rabbitmq-server-ha.ocf
    +++ b/scripts/rabbitmq-server-ha.ocf
    @@ -52,6 +52,7 @@ OCF_RESKEY_policy_file_default="/usr/local/sbin/set_rabbitmq_policy"
     OCF_RESKEY_rmq_feature_health_check_default=true
     OCF_RESKEY_rmq_feature_local_list_queues_default=true
     OCF_RESKEY_limit_nofile_default=65535
    +OCF_RESKEY_avoid_using_iptables_default=false
     
     : ${HA_LOGTAG="lrmd"}
     : ${HA_LOGFACILITY="daemon"}
    @@ -78,6 +79,7 @@ OCF_RESKEY_limit_nofile_default=65535
     : ${OCF_RESKEY_rmq_feature_health_check=${OCF_RESKEY_rmq_feature_health_check_default}}
     : ${OCF_RESKEY_rmq_feature_local_list_queues=${OCF_RESKEY_rmq_feature_local_list_queues_default}}
     : ${OCF_RESKEY_limit_nofile=${OCF_RESKEY_limit_nofile_default}}
    +: ${OCF_RESKEY_avoid_using_iptables=${OCF_RESKEY_avoid_using_iptables_default}}
     
     #######################################################################
     
    @@ -357,6 +359,15 @@ Soft and hard limit for NOFILE
     
     
     
    +
    +
    +When set to true the iptables calls to block client access become
    +noops. This is useful when we run inside containers.
    +
    +Disable iptables use entirely
    +
    +
    +
     $EXTENDED_OCF_PARAMS
     
     
    @@ -764,6 +775,10 @@ reset_mnesia() {
     
     block_client_access()
     {
    +    # When OCF_RESKEY_avoid_using_iptables is true iptables calls are noops
    +    if [ "${OCF_RESKEY_avoid_using_iptables}" == 'true' ] ; then
    +        return $OCF_SUCCESS
    +    fi
         # do not add temporary RMQ blocking rule, if it is already exist
         # otherwise, try to add a blocking rule with max of 5 retries
         local tries=5
    @@ -782,6 +797,10 @@ block_client_access()
     
     unblock_client_access()
     {
    +    # When OCF_RESKEY_avoid_using_iptables is true iptables calls are noops
    +    if [ "${OCF_RESKEY_avoid_using_iptables}" == 'true' ] ; then
    +        return
    +    fi
         # remove all temporary RMQ blocking rules, if there are more than one exist
         for i in $(iptables -nvL --wait --line-numbers | awk '/temporary RMQ block/ {print $1}'); do
           iptables --wait -D INPUT -p tcp -m tcp --dport ${OCF_RESKEY_node_port} -m state --state NEW,RELATED,ESTABLISHED \